From 6cf8f9cdd963e3cc8af20b1d3b2df7e46bc34967 Mon Sep 17 00:00:00 2001 From: hebo Date: Sat, 10 Jan 2026 10:09:15 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BA=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 + src/api/base/invApplyApi.ts | 138 ++ src/api/base/invItemApi.ts | 23 + src/api/base/invOutBillApi.ts | 37 + src/api/base/jfApi.ts | 43 + src/api/base/server.ts | 5 + src/pages.json | 63 + src/pages/base/service/index.vue | 42 + .../components/InvItemSelector/index.vue | 543 +++++++ src/pages/components/PdfPreview/index.vue | 253 +++ src/pages/components/StudentPicker/index.vue | 1144 +++++++++----- src/pages/statistics/jc/jcList.vue | 430 +++++ src/pages/system/web-viewer/index.vue | 86 +- .../JiFenPingJia/jfself/IntegralApply.vue | 4 +- .../JiFenPingJia/jfself/JiFenPingJia.vue | 624 +++++++- .../JiFenPingJia/jfself/MyScoreDetail.vue | 112 +- .../JiFenPingJia/jfself/ScoreListByType.vue | 64 +- .../view/routine/JiFenPingJia/jfsp/JfFlow.vue | 15 +- .../routine/JiFenPingJia/jfsp/compare.vue | 1397 +++++++++++++++++ .../view/routine/JiFenPingJia/jfsp/index.vue | 269 +++- .../view/routine/JiFenPingJia/jfsp/list.vue | 458 ++++++ .../view/routine/ShiTangXunCha/detail.vue | 3 +- .../view/routine/inv/invout/ApprovalOut.vue | 417 +++++ .../view/routine/inv/invout/DirectOut.vue | 1146 ++++++++++++++ src/pages/view/routine/inv/invout/index.vue | 96 ++ .../routine/inv/invsp/InvApplyApprove.vue | 617 ++++++++ src/pages/view/routine/inv/invsp/index.vue | 516 ++++++ src/pages/view/routine/inv/invsq/Apply.vue | 1179 ++++++++++++++ src/pages/view/routine/inv/invsq/detail.vue | 572 +++++++ src/pages/view/routine/inv/invsq/index.vue | 549 +++++++ src/pages/view/routine/wj/wjList.vue | 3 +- src/pages/view/routine/yishiyice/push.vue | 37 +- .../view/routine/yishiyice/rw/detail.vue | 1 - src/static/base/home/invly.png | Bin 0 -> 7578 bytes src/static/base/home/invout.png | Bin 0 -> 10067 bytes src/static/base/home/invsp.png | Bin 0 -> 7417 bytes src/static/base/home/jctjqd.png | Bin 0 -> 7055 bytes src/types/jweixin-js-sdk.d.ts | 54 + src/utils/request/index.ts | 3 +- src/utils/wechatShare.ts | 313 ++++ vite.config.ts | 33 +- 41 files changed, 10833 insertions(+), 457 deletions(-) create mode 100644 src/api/base/invApplyApi.ts create mode 100644 src/api/base/invItemApi.ts create mode 100644 src/api/base/invOutBillApi.ts create mode 100644 src/pages/components/InvItemSelector/index.vue create mode 100644 src/pages/components/PdfPreview/index.vue create mode 100644 src/pages/statistics/jc/jcList.vue create mode 100644 src/pages/view/routine/JiFenPingJia/jfsp/compare.vue create mode 100644 src/pages/view/routine/JiFenPingJia/jfsp/list.vue create mode 100644 src/pages/view/routine/inv/invout/ApprovalOut.vue create mode 100644 src/pages/view/routine/inv/invout/DirectOut.vue create mode 100644 src/pages/view/routine/inv/invout/index.vue create mode 100644 src/pages/view/routine/inv/invsp/InvApplyApprove.vue create mode 100644 src/pages/view/routine/inv/invsp/index.vue create mode 100644 src/pages/view/routine/inv/invsq/Apply.vue create mode 100644 src/pages/view/routine/inv/invsq/detail.vue create mode 100644 src/pages/view/routine/inv/invsq/index.vue create mode 100644 src/static/base/home/invly.png create mode 100644 src/static/base/home/invout.png create mode 100644 src/static/base/home/invsp.png create mode 100644 src/static/base/home/jctjqd.png create mode 100644 src/types/jweixin-js-sdk.d.ts create mode 100644 src/utils/wechatShare.ts diff --git a/package.json b/package.json index 168e6e8..57329af 100644 --- a/package.json +++ b/package.json @@ -55,6 +55,7 @@ "clipboard": "2.0.11", "dayjs": "1.11.6", "jest": "27.0.4", + "jweixin-js-sdk": "^1.6.0", "lodash": "4.17.21", "pinia": "2.0.23", "pinia-plugin-persist-uni": "1.2.0", diff --git a/src/api/base/invApplyApi.ts b/src/api/base/invApplyApi.ts new file mode 100644 index 0000000..5c9e798 --- /dev/null +++ b/src/api/base/invApplyApi.ts @@ -0,0 +1,138 @@ +import { get, post } from '@/utils/request'; + +/** + * 分页查询领用申请 + */ +export function invApplyFindPageApi(params: any) { + return get('/api/invApply/findPage', params); +} + +/** + * 根据ID查询领用申请 + */ +export function invApplyFindByIdApi(params: any) { + return get('/api/invApply/findById', params); +} + +/** + * 根据ID查询领用申请(完整信息) + */ +export function invApplyFindFullByIdApi(params: any) { + return get('/api/invApply/findByIdFull', params); +} + +/** + * 保存领用申请(新增/修改) + */ +export function invApplySaveApi(params: any) { + return post('/api/invApply/save', params); +} + +/** + * 删除领用申请 + */ +export function invApplyDeleteApi(params: any) { + return post('/api/invApply/delete', params); +} + +/** + * 提交领用申请(走审批流程) + */ +export function invApplySqApi(params: any) { + return post('/api/invApply/sq', params); +} + +/** + * 重新提交领用申请 + */ +export function invApplyReSubmitApi(params: any) { + return post('/api/invApply/reSubmit', params); +} + +/** + * 撤回领用申请 + */ +export function invApplyWithdrawApi(params: { id: string; spRemark?: string }) { + let url = `/api/invApply/withdraw?id=${params.id}`; + if (params.spRemark) { + url += `&spRemark=${encodeURIComponent(params.spRemark)}`; + } + return post(url, null); +} + +/** + * 查询领用申请流程详情 + */ +export function invApplyFlowByIdApi(params: any) { + return get('/api/invApply/flowById', params); +} + +/** + * 根据申请单ID查询明细列表 + */ +export function invApplyItemFindPageApi(params: any) { + return get('/api/invApplyItem/findPage', params); +} + +/** + * 根据申请单ID查询明细列表(按申请单ID) + */ +export function invApplyItemFindByApplyIdApi(applyId: string) { + return get('/api/invApplyItem/findByApplyId', { applyId }); +} + +/** + * 批量保存明细 + */ +export function invApplyItemSaveBatchApi(params: any) { + return post('/api/invApplyItem/saveBatch', params); +} + +/** + * 查询仓库列表 + */ +export function invWarehouseFindAllApi(params: any) { + return get('/api/invWarehouse/findAll', params); +} + +/** + * 查询物品列表 + */ +export function invItemFindAllApi(params: any) { + return get('/api/invItem/findAll', params); +} + +/** + * 查询库位列表 + */ +export function invLocationFindAllApi(params: any) { + return get('/api/invLocation/findAll', params); +} + +/** + * 审批领用申请 + */ +export function invApplySpApi(params: any) { + return post('/api/invApply/sp', params); +} + +/** + * 转办领用申请 + */ +export function invApplyTransferApi(params: any) { + return post('/api/invApply/transfer', params); +} + +/** + * 终止领用申请 + */ +export function invApplyStopApi(params: any) { + return post('/api/invApply/stop', params); +} + +/** + * 领用申请待办/已办列表 + */ +export function invApplyFindUserTodosPageApi(params: any) { + return get('/api/invApply/findUserTodosPage', params); +} \ No newline at end of file diff --git a/src/api/base/invItemApi.ts b/src/api/base/invItemApi.ts new file mode 100644 index 0000000..8bc1d99 --- /dev/null +++ b/src/api/base/invItemApi.ts @@ -0,0 +1,23 @@ +import { get, post } from '@/utils/request'; + +/** + * 查询物品列表(全部) + */ +export function invItemFindAllApi(params?: any) { + return get('/api/invItem/findAll', params); +} + +/** + * 分页查询物品列表 + */ +export function invItemFindPageApi(params: any) { + return get('/api/invItem/findPage', params); +} + +/** + * 根据ID查询物品 + */ +export function invItemFindByIdApi(params: any) { + return get('/api/invItem/findById', params); +} + diff --git a/src/api/base/invOutBillApi.ts b/src/api/base/invOutBillApi.ts new file mode 100644 index 0000000..51995cd --- /dev/null +++ b/src/api/base/invOutBillApi.ts @@ -0,0 +1,37 @@ +import { get, post } from '@/utils/request'; + +/** + * 分页查询出库单 + */ +export function invOutBillFindPageApi(params: any) { + return get('/api/invOutBill/findPage', params); +} + +/** + * 根据ID查询出库单 + */ +export function invOutBillFindByIdApi(params: any) { + return get('/api/invOutBill/findById', params); +} + +/** + * 保存出库单(新增/修改) + */ +export function invOutBillSaveApi(params: any) { + return post('/api/invOutBill/save', params); +} + +/** + * 删除出库单 + */ +export function invOutBillDeleteApi(params: any) { + return post('/api/invOutBill/delete', params); +} + +/** + * 查询全部出库单 + */ +export function invOutBillFindAllApi() { + return get('/api/invOutBill/findAll', {}); +} + diff --git a/src/api/base/jfApi.ts b/src/api/base/jfApi.ts index 4bf051f..5ce6437 100644 --- a/src/api/base/jfApi.ts +++ b/src/api/base/jfApi.ts @@ -93,6 +93,18 @@ export function jfReSubmitApi(params: any) { return post('/api/jf/reSubmit', params); } +/** + * 积分审批-撤回 + */ +export function jfWithdrawApi(params: { id: string; spRemark?: string }) { + // 将参数作为查询字符串传递 + let url = `/api/jf/withdraw?id=${params.id}`; + if (params.spRemark) { + url += `&spRemark=${encodeURIComponent(params.spRemark)}`; + } + return post(url, null); +} + /** * 积分审批-流程详情 */ @@ -135,3 +147,34 @@ export function jfStudentAwardDeleteApi(params: any) { return post('/api/jfXsqd/delete', params); } +/** + * 导出教师积分明细 + */ +export function jfExportApi(params: any) { + return get('/api/jf/export', params); +} + +/** + * 按申请人分组统计待审批记录 + * @param params { jsId: 审批人ID, dbZt: 待办状态(A/B), spType: 审批类型(SP/CC), page: 页码, rows: 每页条数 } + */ +export function jfFindUserTodosGroupByApplicantApi(params: any) { + return get('/api/jf/findUserTodosGroupByApplicant', params); +} + +/** + * 获取指定申请人的所有待审批记录详情 + * @param params { applicantId: 申请人ID, jsId: 审批人ID, dbZt: 待办状态, spType: 审批类型 } + */ +export function jfFindApplicantTodosDetailApi(params: any) { + return get('/api/jf/findApplicantTodosDetail', params); +} + +/** + * 批量审批接口 + * @param params { records: [{ xxtsId, ywId, spStatus, spRemark }], spStatus: 审批状态, spRemark: 审批意见 } + */ +export function jfBatchSpApi(params: any) { + return post('/api/jf/batchSp', params); +} + diff --git a/src/api/base/server.ts b/src/api/base/server.ts index 55173bd..2536e44 100644 --- a/src/api/base/server.ts +++ b/src/api/base/server.ts @@ -189,6 +189,11 @@ export const xsFindList = async (params: any) => { return await get("/api/xs/findPage", params); }; +// 获取学生列表(不受权限控制) +export const xsFindListKz = async (params: any) => { + return await get("/api/xs/findPageKz", params); +}; + // 获取学生家长列表 export const xsJzListByXsIdApi = async (params: any) => { return await get("/api/jz/getListByXsId", params); diff --git a/src/pages.json b/src/pages.json index e48f1e9..dab017f 100644 --- a/src/pages.json +++ b/src/pages.json @@ -136,6 +136,13 @@ "enablePullDownRefresh": false } }, + { + "path": "pages/statistics/jc/jcList", + "style": { + "navigationBarTitleText": "就餐统计", + "enablePullDownRefresh": false + } + }, { "path": "pages/statistics/jc/grade-statistics", "style": { @@ -876,6 +883,20 @@ "enablePullDownRefresh": false } }, + { + "path": "pages/view/routine/JiFenPingJia/jfsp/list", + "style": { + "navigationBarTitleText": "审批列表", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/view/routine/JiFenPingJia/jfsp/compare", + "style": { + "navigationBarTitleText": "积分审批", + "enablePullDownRefresh": false + } + }, { "path": "pages/view/routine/JiFenPingJia/jfdj/index", "style": { @@ -911,6 +932,48 @@ "enablePullDownRefresh": false } }, + { + "path": "pages/view/routine/inv/invsq/index", + "style": { + "navigationBarTitleText": "领用申请", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/view/routine/inv/invsq/detail", + "style": { + "navigationBarTitleText": "领用详情", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/view/routine/inv/invsq/Apply", + "style": { + "navigationBarTitleText": "领用申请", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/view/routine/inv/invsp/index", + "style": { + "navigationBarTitleText": "领用审批", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/view/routine/inv/invsp/InvApplyApprove", + "style": { + "navigationBarTitleText": "领用审批详情", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/view/routine/inv/invout/index", + "style": { + "navigationBarTitleText": "物品出库", + "enablePullDownRefresh": false + } + }, { "path": "pages/view/routine/wj/index", "style": { diff --git a/src/pages/base/service/index.vue b/src/pages/base/service/index.vue index ffabdd5..1af25b2 100644 --- a/src/pages/base/service/index.vue +++ b/src/pages/base/service/index.vue @@ -710,6 +710,40 @@ const sections = reactive([ }, ], }, + { + id: "routine-inv", + icon: "inv", + text: "库存管理", + show: true, + permissionKey: "routine-inv", + isFolder: true, + folderItems: [ + { + id: "routine-inv-ly", + icon: "invly", + text: "领用申请", + show: true, + permissionKey: "routine-invly", + path: "/pages/view/routine/inv/invsq/index", + }, + { + id: "routine-inv-sp", + icon: "invsp", + text: "领用审批", + show: true, + permissionKey: "routine-invsp", + path: "/pages/view/routine/inv/invsp/index", + }, + { + id: "routine-inv-out", + icon: "invout", + text: "物品出库", + show: true, + permissionKey: "routine-invout", + path: "/pages/view/routine/inv/invout/index", + }, + ], + }, ], }, { @@ -845,6 +879,14 @@ const sections = reactive([ permissionKey: "routine-jcdm", // 就餐点名权限编码 path: "/pages/view/routine/jc/bzList", }, + { + id: "r11", + icon: "jctjqd", + text: "就餐统计", + show: true, + permissionKey: "routine-jctjqd", // 就餐统计权限编码 + path: "/pages/statistics/jc/jcList", + }, { id: "r9", icon: "jlfb", diff --git a/src/pages/components/InvItemSelector/index.vue b/src/pages/components/InvItemSelector/index.vue new file mode 100644 index 0000000..9e841b9 --- /dev/null +++ b/src/pages/components/InvItemSelector/index.vue @@ -0,0 +1,543 @@ + + + + + + diff --git a/src/pages/components/PdfPreview/index.vue b/src/pages/components/PdfPreview/index.vue new file mode 100644 index 0000000..e3bcbe4 --- /dev/null +++ b/src/pages/components/PdfPreview/index.vue @@ -0,0 +1,253 @@ + + + + + + diff --git a/src/pages/components/StudentPicker/index.vue b/src/pages/components/StudentPicker/index.vue index cb63b51..b035d16 100644 --- a/src/pages/components/StudentPicker/index.vue +++ b/src/pages/components/StudentPicker/index.vue @@ -1,98 +1,199 @@ diff --git a/src/pages/view/routine/JiFenPingJia/jfsp/JfFlow.vue b/src/pages/view/routine/JiFenPingJia/jfsp/JfFlow.vue index 335ad47..06497b7 100644 --- a/src/pages/view/routine/JiFenPingJia/jfsp/JfFlow.vue +++ b/src/pages/view/routine/JiFenPingJia/jfsp/JfFlow.vue @@ -452,9 +452,18 @@ const handleStop = () => { // 跳转回审批列表页面 const navigateToIndex = () => { setTimeout(() => { - uni.redirectTo({ - url: '/pages/view/routine/JiFenPingJia/jfsp/index' - }); + // 使用 navigateBack 返回上一页,保留查询条件 + // 如果上一页不存在(直接打开详情页),则使用 redirectTo + const pages = getCurrentPages(); + if (pages.length > 1) { + uni.navigateBack({ + delta: 1 + }); + } else { + uni.redirectTo({ + url: '/pages/view/routine/JiFenPingJia/jfsp/index' + }); + } }, 500); }; diff --git a/src/pages/view/routine/JiFenPingJia/jfsp/compare.vue b/src/pages/view/routine/JiFenPingJia/jfsp/compare.vue new file mode 100644 index 0000000..03a1500 --- /dev/null +++ b/src/pages/view/routine/JiFenPingJia/jfsp/compare.vue @@ -0,0 +1,1397 @@ + + + + + \ No newline at end of file diff --git a/src/pages/view/routine/JiFenPingJia/jfsp/index.vue b/src/pages/view/routine/JiFenPingJia/jfsp/index.vue index 193890b..9379d02 100644 --- a/src/pages/view/routine/JiFenPingJia/jfsp/index.vue +++ b/src/pages/view/routine/JiFenPingJia/jfsp/index.vue @@ -19,6 +19,17 @@ /> + + + + {{ selectedJfTypeName || '选择业绩类别' }} + + + + + + + + + + @@ -282,6 +492,47 @@ onShow(() => { color: #333; } +.category-filter { + margin-top: 10px; +} + +.category-selector { + display: flex; + align-items: center; + justify-content: space-between; + padding: 10px 12px; + background-color: #f8f9fa; + border: 1px solid #e9ecef; + border-radius: 8px; + position: relative; + cursor: pointer; +} + +.category-text { + flex: 1; + font-size: 14px; + color: #333; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + + &.placeholder { + color: #999; + } +} + +.clear-btn { + display: flex; + align-items: center; + justify-content: center; + width: 20px; + height: 20px; + margin-left: 8px; + padding: 2px; + background-color: #e9ecef; + border-radius: 50%; +} + .filter-tabs { display: flex; gap: 8px; @@ -308,8 +559,8 @@ onShow(() => { .middle-section { flex: 1; - margin-top: 140px; // 为顶部搜索栏留出空间 - height: calc(100vh - 140px); // 减去顶部区域的高度 + margin-top: 200px; // 为顶部搜索栏和类别选择器留出空间 + height: calc(100vh - 200px); // 减去顶部区域的高度 padding: 12px; position: relative; z-index: 0; diff --git a/src/pages/view/routine/JiFenPingJia/jfsp/list.vue b/src/pages/view/routine/JiFenPingJia/jfsp/list.vue new file mode 100644 index 0000000..109d78e --- /dev/null +++ b/src/pages/view/routine/JiFenPingJia/jfsp/list.vue @@ -0,0 +1,458 @@ + + + + + + diff --git a/src/pages/view/routine/ShiTangXunCha/detail.vue b/src/pages/view/routine/ShiTangXunCha/detail.vue index be7b112..e0807cb 100644 --- a/src/pages/view/routine/ShiTangXunCha/detail.vue +++ b/src/pages/view/routine/ShiTangXunCha/detail.vue @@ -10,7 +10,7 @@ 工作描述 - + {{ detailData.gzms || '暂无描述' }} @@ -284,6 +284,7 @@ const goBack = () => { color: #5a6c7d; line-height: 1.6; word-break: break-word; + white-space: pre-line; } } } diff --git a/src/pages/view/routine/inv/invout/ApprovalOut.vue b/src/pages/view/routine/inv/invout/ApprovalOut.vue new file mode 100644 index 0000000..7805621 --- /dev/null +++ b/src/pages/view/routine/inv/invout/ApprovalOut.vue @@ -0,0 +1,417 @@ + + + + + + diff --git a/src/pages/view/routine/inv/invout/DirectOut.vue b/src/pages/view/routine/inv/invout/DirectOut.vue new file mode 100644 index 0000000..1d9c8e9 --- /dev/null +++ b/src/pages/view/routine/inv/invout/DirectOut.vue @@ -0,0 +1,1146 @@ +