| ¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from "@/utils/request"; |
| | | |
| | | /** |
| | | * 书æ¶ç®¡çç¸å
³APIæ¥å£ |
| | | * å
å«ä»åºç®¡çãè´§æ¶ç®¡çãå¾ä¹¦ç®¡ççåè½çæ¥å£ |
| | | */ |
| | | |
| | | /** |
| | | * è·åä»åºå表 |
| | | * @description è·åææä»åºçåºæ¬ä¿¡æ¯å表 |
| | | * @returns {Promise} è¿åä»åºåè¡¨æ°æ® |
| | | */ |
| | | export function getWarehouseList() { |
| | | return request({ |
| | | url: "/warehouse/tree", |
| | | method: "get", |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * æ°å¢ä»åº |
| | | * @description å建æ°çä»åºè®°å½ |
| | | * @param {Object} data ä»åºä¿¡æ¯å¯¹è±¡ï¼å
å«ä»åºåç§°çåæ®µ |
| | | * @returns {Promise} è¿åæ°å¢ç»æ |
| | | */ |
| | | export function addWarehouse(data) { |
| | | return request({ |
| | | url: "/warehouse/add", |
| | | method: "post", |
| | | data, |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * æ´æ°ä»åºä¿¡æ¯ |
| | | * @description ä¿®æ¹ç°æä»åºçåºæ¬ä¿¡æ¯ |
| | | * @param {Object} data ä»åºä¿¡æ¯å¯¹è±¡ï¼å¿
é¡»å
å«ä»åºID |
| | | * @returns {Promise} è¿åæ´æ°ç»æ |
| | | */ |
| | | export function updateWarehouse(data) { |
| | | return request({ |
| | | url: "/warehouse/update", |
| | | method: "put", |
| | | data, |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * å é¤ä»åº |
| | | * @description æ ¹æ®ä»åºIDå 餿å®çä»åºè®°å½ |
| | | * @param {string|number} id ä»åºID |
| | | * @returns {Promise} è¿åå é¤ç»æ |
| | | */ |
| | | export function deleteWarehouse(data) { |
| | | return request({ |
| | | url: `/warehouse/delete/`, |
| | | method: "delete", |
| | | data, |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * è·åè´§æ¶å表 |
| | | * @description æ ¹æ®ä»åºIDè·å该ä»åºä¸çææè´§æ¶ä¿¡æ¯ |
| | | * @param {string|number} warehouseId ä»åºID |
| | | * @returns {Promise} è¿åè´§æ¶åè¡¨æ°æ® |
| | | */ |
| | | export function getShelfList(warehouseId) { |
| | | return request({ |
| | | url: `/shelf/list/${warehouseId}`, |
| | | method: "get", |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * æ°å¢è´§æ¶ |
| | | * @description 卿å®ä»åºä¸å建æ°çè´§æ¶è®°å½ |
| | | * @param {Object} data è´§æ¶ä¿¡æ¯å¯¹è±¡ï¼å
å«è´§æ¶åç§°ã屿°ãåæ°çåæ®µ |
| | | * @returns {Promise} è¿åæ°å¢ç»æ |
| | | */ |
| | | export function addShelf(data) { |
| | | return request({ |
| | | url: "/warehouse/goodsShelves/add", |
| | | method: "post", |
| | | data, |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * æ´æ°è´§æ¶ä¿¡æ¯ |
| | | * @description ä¿®æ¹ç°æè´§æ¶çåºæ¬ä¿¡æ¯ |
| | | * @param {Object} data è´§æ¶ä¿¡æ¯å¯¹è±¡ï¼å¿
é¡»å
å«è´§æ¶ID |
| | | * @returns {Promise} è¿åæ´æ°ç»æ |
| | | */ |
| | | export function updateShelf(data) { |
| | | return request({ |
| | | url: "/warehouse/goodsShelves/update", |
| | | method: "put", |
| | | data, |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * å é¤è´§æ¶ |
| | | * @description æ ¹æ®è´§æ¶IDå 餿å®çè´§æ¶è®°å½ï¼åç«¯è¦æ±ä¼ å
¥ ID æ°ç»ï¼æ¯ææ¹éï¼ |
| | | * @param {Array<string|number>} data è´§æ¶IDæ°ç» |
| | | * @returns {Promise} è¿åå é¤ç»æ |
| | | */ |
| | | export function deleteShelf(data) { |
| | | return request({ |
| | | url: `/warehouse/goodsShelves/delete/`, |
| | | method: "delete", |
| | | data, |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * è·åä»åºç»æ |
| | | * @description è·åæå®ä»åºç宿´ç»æä¿¡æ¯ï¼å
æ¬è´§æ¶ã屿°ãåæ°ç |
| | | * @param {string|number} warehouseId ä»åºID |
| | | * @returns {Promise} è¿åä»åºç宿´ç»ææ°æ® |
| | | */ |
| | | export function getWarehouseStructure(data) { |
| | | return request({ |
| | | url: `/warehouse/goodsShelvesRowcol/list`, |
| | | method: "get", |
| | | params: data, |
| | | }); |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from "@/utils/request"; |
| | | |
| | | // ææ¡£åé
管çç¸å
³æ¥å£ |
| | | |
| | | // è·åææ¡£å表ï¼ç¨äºåé
书ç±éæ©ï¼ |
| | | export function getDocumentList() { |
| | | return request({ |
| | | url: "/documentation/list", |
| | | method: "get", |
| | | }); |
| | | } |
| | | |
| | | // åé
å页æ¥è¯¢ |
| | | export function getBorrowList(params) { |
| | | return request({ |
| | | url: "/documentationBorrowManagement/listPage", |
| | | method: "get", |
| | | params: params, |
| | | }); |
| | | } |
| | | |
| | | // æ°å¢åé
|
| | | export function addBorrow(data) { |
| | | return request({ |
| | | url: "/documentationBorrowManagement/add", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | // æ´æ°åé
|
| | | export function updateBorrow(data) { |
| | | return request({ |
| | | url: "/documentationBorrowManagement/update", |
| | | method: "put", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | // å é¤åé
|
| | | export function deleteBorrow(ids) { |
| | | return request({ |
| | | url: "/documentationBorrowManagement/delete", |
| | | method: "delete", |
| | | data: ids, |
| | | }); |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from "@/utils/request"; |
| | | |
| | | // è·ååç±»æ |
| | | export function getCategoryTree() { |
| | | return request({ |
| | | url: "/warehouse/documentClassification/getList", |
| | | method: "get", |
| | | }); |
| | | } |
| | | |
| | | // æ°å¢åç±» |
| | | export function addCategory(data) { |
| | | return request({ |
| | | url: "/warehouse/documentClassification/add", |
| | | method: "post", |
| | | data: { |
| | | category: data.category, |
| | | parentId: data.parentId, |
| | | }, |
| | | }); |
| | | } |
| | | |
| | | // ä¿®æ¹åç±» |
| | | export function updateCategory(data) { |
| | | return request({ |
| | | url: "/warehouse/documentClassification/update", |
| | | method: "put", |
| | | data: { |
| | | id: data.id, |
| | | category: data.category, |
| | | }, |
| | | }); |
| | | } |
| | | |
| | | // å é¤åç±» |
| | | export function deleteCategory(ids) { |
| | | return request({ |
| | | url: "/warehouse/documentClassification/delete", |
| | | method: "delete", |
| | | data: ids, |
| | | }); |
| | | } |
| | | |
| | | // è·åææ¡£å表ï¼åé¡µï¼ |
| | | export function getDocumentList(query) { |
| | | return request({ |
| | | url: "/documentation/listPage", |
| | | method: "get", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | // æ°å¢ææ¡£ |
| | | export function addDocument(data) { |
| | | return request({ |
| | | url: "/documentation/add", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | // ä¿®æ¹ææ¡£ |
| | | export function updateDocument(data) { |
| | | return request({ |
| | | url: "/documentation/update", |
| | | method: "put", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | // å é¤ææ¡£ |
| | | export function deleteDocument(ids) { |
| | | return request({ |
| | | url: "/documentation/delete", |
| | | method: "delete", |
| | | data: ids, |
| | | }); |
| | | } |
| | | |
| | | // è·åææ¡£è¯¦æ
|
| | | export function getDocumentDetail(id) { |
| | | return request({ |
| | | url: "/document/" + id, |
| | | method: "get", |
| | | }); |
| | | } |
| | | |
| | | // æç´¢ææ¡£ |
| | | export function searchDocument(query) { |
| | | return request({ |
| | | url: "/document/search", |
| | | method: "get", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | // è·åä»åºç»æ |
| | | export function getWarehouseStructure() { |
| | | return request({ |
| | | url: "/document/warehouse/structure", |
| | | method: "get", |
| | | }); |
| | | } |
| | | |
| | | // é件管çç¸å
³æ¥å£ |
| | | // æ·»å éä»¶ |
| | | export function addDocumentationFile(data) { |
| | | return request({ |
| | | url: "/documentation/documentationFile/add", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | // è·åéä»¶å表 |
| | | export function getDocumentationFileList(params) { |
| | | return request({ |
| | | url: "/documentation/documentationFile/listPage", |
| | | method: "get", |
| | | params: params, |
| | | }); |
| | | } |
| | | |
| | | // å é¤éä»¶ |
| | | export function deleteDocumentationFile(ids) { |
| | | return request({ |
| | | url: "/documentation/documentationFile/del", |
| | | method: "delete", |
| | | data: ids, |
| | | }); |
| | | } |
| | | |
| | | // ææ¡£åé
管çç¸å
³æ¥å£ |
| | | export function getBorrowList(params) { |
| | | return request({ |
| | | url: "/documentationBorrowManagement/listPage", |
| | | method: "get", |
| | | params: params, |
| | | }); |
| | | } |
| | | |
| | | export function addBorrow(data) { |
| | | return request({ |
| | | url: "/documentationBorrowManagement/add", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | export function updateBorrow(data) { |
| | | return request({ |
| | | url: "/documentationBorrowManagement/update", |
| | | method: "put", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | export function deleteBorrow(ids) { |
| | | return request({ |
| | | url: "/documentationBorrowManagement/delete", |
| | | method: "delete", |
| | | data: ids, |
| | | }); |
| | | } |
| | | |
| | | // ç»è®¡ç¸å
³æ¥å£ |
| | | // è·åæ»ä½ç»è®¡æ°æ® |
| | | export function getDocumentationOverview() { |
| | | return request({ |
| | | url: "/documentation/overview", |
| | | method: "get", |
| | | }); |
| | | } |
| | | |
| | | // è·ååç±»ç»è®¡æ°æ® |
| | | export function getDocumentationCategoryStats() { |
| | | return request({ |
| | | url: "/documentation/category", |
| | | method: "get", |
| | | }); |
| | | } |
| | | |
| | | // è·åç¶æç»è®¡æ°æ® |
| | | export function getDocumentationStatusStats() { |
| | | return request({ |
| | | url: "/documentation/status", |
| | | method: "get", |
| | | }); |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from "@/utils/request"; |
| | | |
| | | // å页æ¥è¯¢å½è¿è®°å½ |
| | | export function getReturnListPage(query) { |
| | | return request({ |
| | | url: "/documentationBorrowManagement/listPageReturn", |
| | | method: "get", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | // å½è¿æä½ |
| | | export function returnDocument(data) { |
| | | return request({ |
| | | url: "/documentationBorrowManagement/revent", |
| | | method: "put", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | // å é¤å½è¿è®°å½ |
| | | export function deleteReturn(ids) { |
| | | return request({ |
| | | url: "/documentationBorrowManagement/reventDelete", |
| | | method: "delete", |
| | | data: ids, |
| | | }); |
| | | } |
| | | //æ ¹æ®ä¹¦ç±idæ¥è¯¢åé
è®°å½ |
| | | export function getBorrowListByDocumentationId(id) { |
| | | return request({ |
| | | url: "/documentationBorrowManagement/getByDocumentationId/"+id, |
| | | method: "get" |
| | | }); |
| | | } |
| | | |
| | | // æ´æ°åé
è®°å½ |
| | | export function updateBorrow(data) { |
| | | return request({ |
| | | url: "/documentationBorrowManagement/update", |
| | | method: "put", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | // å½è¿æ´æ° |
| | | export function reventUpdate(data) { |
| | | return request({ |
| | | url: "/documentationBorrowManagement/reventUpdate", |
| | | method: "put", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | // è·åææ¡£å表 |
| | | export function getDocumentList() { |
| | | return request({ |
| | | url: "/documentationBorrowManagement/list", |
| | | method: "get", |
| | | }); |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from "@/utils/request"; |
| | | |
| | | // è·åæ¡£æ¡æ»ä½ç»è®¡ |
| | | export function getDocumentStatistics() { |
| | | return request({ |
| | | url: "/fileManagement/statistics/overview", |
| | | method: "get", |
| | | }); |
| | | } |
| | | |
| | | // è·åæ¡£æ¡åç±»ç»è®¡ |
| | | export function getCategoryStatistics() { |
| | | return request({ |
| | | url: "/fileManagement/statistics/category", |
| | | method: "get", |
| | | }); |
| | | } |
| | | |
| | | // è·åæ¡£æ¡ç¶æç»è®¡ |
| | | export function getStatusStatistics() { |
| | | return request({ |
| | | url: "/fileManagement/statistics/status", |
| | | method: "get", |
| | | }); |
| | | } |
| | | |
| | | // è·åæ¡£æ¡åé
ç»è®¡ |
| | | export function getBorrowStatistics() { |
| | | return request({ |
| | | url: "/fileManagement/statistics/borrow", |
| | | method: "get", |
| | | }); |
| | | } |
| | | |
| | | // è·åæ¡£æ¡å¹´åº¦ç»è®¡ |
| | | export function getYearStatistics() { |
| | | return request({ |
| | | url: "/fileManagement/statistics/year", |
| | | method: "get", |
| | | }); |
| | | } |
| | | |
| | | // è·åæ¡£æ¡ä½ç½®ç»è®¡ |
| | | export function getLocationStatistics() { |
| | | return request({ |
| | | url: "/fileManagement/statistics/location", |
| | | method: "get", |
| | | }); |
| | | } |
| | | |
| | | // è·åæ¡£æ¡è¶å¿ç»è®¡ |
| | | export function getTrendStatistics(params) { |
| | | return request({ |
| | | url: "/fileManagement/statistics/trend", |
| | | method: "get", |
| | | params: params, |
| | | }); |
| | | } |
| | | |
| | | // è·åæ¡£æ¡åé
æè¡ |
| | | export function getBorrowRanking() { |
| | | return request({ |
| | | url: "/fileManagement/statistics/borrowRanking", |
| | | method: "get", |
| | | }); |
| | | } |
| | | |
| | | // è·åæ¡£æ¡å类详æ
ç»è®¡ |
| | | export function getCategoryDetailStatistics(categoryId) { |
| | | return request({ |
| | | url: `/fileManagement/statistics/categoryDetail/${categoryId}`, |
| | | method: "get", |
| | | }); |
| | | } |
| | | |
| | |
| | | "style": { |
| | | "navigationBarTitleText": "æ¶æ¯ä¸å¿" |
| | | } |
| | | }, |
| | | { |
| | | "path": "pages/fileManagement/borrow/index", |
| | | "style": { |
| | | "navigationBarTitleText": "åé
管ç", |
| | | "navigationStyle": "custom" |
| | | } |
| | | }, |
| | | { |
| | | "path": "pages/fileManagement/borrow/edit", |
| | | "style": { |
| | | "navigationBarTitleText": "åé
ç»è®°", |
| | | "navigationStyle": "custom" |
| | | } |
| | | }, |
| | | { |
| | | "path": "pages/fileManagement/return/index", |
| | | "style": { |
| | | "navigationBarTitleText": "å½è¿ç®¡ç", |
| | | "navigationStyle": "custom" |
| | | } |
| | | }, |
| | | { |
| | | "path": "pages/fileManagement/return/edit", |
| | | "style": { |
| | | "navigationBarTitleText": "å½è¿ç»è®°", |
| | | "navigationStyle": "custom" |
| | | } |
| | | } |
| | | ], |
| | | "subPackages": [ |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <view class="borrow-edit"> |
| | | <PageHeader :title="pageTitle" @back="goBack" /> |
| | | |
| | | <up-form |
| | | ref="formRef" |
| | | :model="form" |
| | | :rules="rules" |
| | | label-width="110" |
| | | > |
| | | <up-form-item label="åé
人" prop="borrower" required> |
| | | <up-input |
| | | v-model="form.borrower" |
| | | placeholder="请è¾å
¥åé
人" |
| | | clearable |
| | | :disabled="isReturned" |
| | | /> |
| | | </up-form-item> |
| | | |
| | | <up-form-item label="åé
书ç±" prop="documentationId" required> |
| | | <up-input |
| | | v-model="displayDocName" |
| | | placeholder="è¯·éæ©åé
书ç±" |
| | | readonly |
| | | :disabled="isEdit" |
| | | @click="!isEdit && (showDocPicker = true)" |
| | | /> |
| | | <template #right> |
| | | <up-icon v-if="!isEdit" name="arrow-right" @click="showDocPicker = true"></up-icon> |
| | | </template> |
| | | </up-form-item> |
| | | |
| | | <up-form-item label="åé
æ¥æ" prop="borrowDate" required> |
| | | <up-input |
| | | v-model="form.borrowDate" |
| | | placeholder="è¯·éæ©åé
æ¥æ" |
| | | readonly |
| | | @click="!isReturned && (showBorrowDatePicker = true)" |
| | | :disabled="isReturned" |
| | | /> |
| | | <template #right> |
| | | <up-icon name="arrow-right" @click="!isReturned && (showBorrowDatePicker = true)"></up-icon> |
| | | </template> |
| | | </up-form-item> |
| | | |
| | | <up-form-item label="åºå½è¿æ¥æ" prop="dueReturnDate" required> |
| | | <up-input |
| | | v-model="form.dueReturnDate" |
| | | placeholder="è¯·éæ©åºå½è¿æ¥æ" |
| | | readonly |
| | | @click="!isReturned && (showDueDatePicker = true)" |
| | | :disabled="isReturned" |
| | | /> |
| | | <template #right> |
| | | <up-icon name="arrow-right" @click="!isReturned && (showDueDatePicker = true)"></up-icon> |
| | | </template> |
| | | </up-form-item> |
| | | |
| | | <up-form-item label="åé
ç®ç" prop="borrowPurpose" required> |
| | | <up-input |
| | | v-model="form.borrowPurpose" |
| | | placeholder="请è¾å
¥åé
ç®ç" |
| | | clearable |
| | | :disabled="isReturned" |
| | | /> |
| | | </up-form-item> |
| | | |
| | | <up-form-item label="夿³¨"> |
| | | <up-textarea |
| | | v-model="form.remark" |
| | | placeholder="请è¾å
¥å¤æ³¨ä¿¡æ¯" |
| | | height="80" |
| | | border="none" |
| | | :disabled="isReturned" |
| | | /> |
| | | </up-form-item> |
| | | </up-form> |
| | | |
| | | <FooterButtons |
| | | v-if="!isReturned" |
| | | :loading="loading" |
| | | :confirmText="isEdit ? 'ä¿å' : 'æ°å¢'" |
| | | @cancel="goBack" |
| | | @confirm="handleSubmit" |
| | | /> |
| | | |
| | | <!-- åé
æ¥æéæ©å¨ --> |
| | | <up-popup :show="showBorrowDatePicker" mode="bottom" @close="showBorrowDatePicker = false"> |
| | | <up-datetime-picker |
| | | :show="true" |
| | | v-model="borrowDateValue" |
| | | @confirm="onBorrowDateConfirm" |
| | | @cancel="showBorrowDatePicker = false" |
| | | mode="date" |
| | | /> |
| | | </up-popup> |
| | | |
| | | <!-- åºå½è¿æ¥æéæ©å¨ --> |
| | | <up-popup :show="showDueDatePicker" mode="bottom" @close="showDueDatePicker = false"> |
| | | <up-datetime-picker |
| | | :show="true" |
| | | v-model="dueReturnDateValue" |
| | | @confirm="onDueDateConfirm" |
| | | @cancel="showDueDatePicker = false" |
| | | mode="date" |
| | | /> |
| | | </up-popup> |
| | | |
| | | <!-- ææ¡£éæ©å¨ --> |
| | | <up-action-sheet |
| | | :show="showDocPicker" |
| | | :actions="documentOptions" |
| | | title="éæ©åé
书ç±" |
| | | @select="onDocSelect" |
| | | @close="showDocPicker = false" |
| | | /> |
| | | </view> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { ref, computed, onMounted } from "vue"; |
| | | import { onLoad } from "@dcloudio/uni-app"; |
| | | import PageHeader from "@/components/PageHeader.vue"; |
| | | import FooterButtons from "@/components/FooterButtons.vue"; |
| | | import { addBorrow, updateBorrow, getDocumentList } from "@/api/fileManagement/borrow"; |
| | | |
| | | const formRef = ref(); |
| | | const loading = ref(false); |
| | | const borrowId = ref(""); |
| | | const isEdit = ref(false); |
| | | |
| | | // å¼¹çªæ¾ç¤ºç¶æ |
| | | const showDocPicker = ref(false); |
| | | const showBorrowDatePicker = ref(false); |
| | | const showDueDatePicker = ref(false); |
| | | |
| | | // æ°æ® |
| | | const documentList = ref([]); |
| | | const borrowDateValue = ref(Date.now()); |
| | | const dueReturnDateValue = ref(Date.now()); |
| | | const displayDocName = ref(""); // ç¨äºæ¾ç¤ºçææ¡£åç§° |
| | | |
| | | const form = ref({ |
| | | id: "", |
| | | documentationId: "", |
| | | borrower: "", |
| | | borrowPurpose: "", |
| | | borrowDate: "", |
| | | dueReturnDate: "", |
| | | remark: "", |
| | | borrowStatus: "", |
| | | }); |
| | | |
| | | const rules = { |
| | | borrower: [{ required: true, message: "请è¾å
¥åé
人", trigger: "blur" }], |
| | | documentationId: [{ required: true, message: "è¯·éæ©åé
书ç±", trigger: "change" }], |
| | | borrowPurpose: [{ required: true, message: "请è¾å
¥åé
ç®ç", trigger: "blur" }], |
| | | borrowDate: [{ required: true, message: "è¯·éæ©åé
æ¥æ", trigger: "change" }], |
| | | dueReturnDate: [{ required: true, message: "è¯·éæ©åºå½è¿æ¥æ", trigger: "change" }], |
| | | }; |
| | | |
| | | // 页颿 é¢ |
| | | const pageTitle = computed(() => { |
| | | if (isEdit.value) { |
| | | return form.value.borrowStatus === "å½è¿" ? "åé
详æ
" : "ç¼è¾åé
"; |
| | | } |
| | | return "æ°å¢åé
"; |
| | | }); |
| | | |
| | | // æ¯å¦å·²å½è¿ |
| | | const isReturned = computed(() => { |
| | | return form.value.borrowStatus === "å½è¿"; |
| | | }); |
| | | |
| | | // ææ¡£é项ï¼ä»
æ°å¢æ¨¡å¼ä½¿ç¨ï¼ |
| | | const documentOptions = computed(() => { |
| | | return documentList.value.map((item) => ({ |
| | | name: item.docName || item.name, |
| | | id: item.id, |
| | | })); |
| | | }); |
| | | |
| | | // è¿åä¸ä¸é¡µ |
| | | const goBack = () => { |
| | | uni.removeStorageSync("borrowEditData"); |
| | | uni.navigateBack(); |
| | | }; |
| | | |
| | | // å è½½ææ¡£å表ï¼ä»
æ°å¢æ¨¡å¼éè¦ï¼ |
| | | const loadDocumentList = async () => { |
| | | try { |
| | | const res = await getDocumentList(); |
| | | if (res.code === 200) { |
| | | documentList.value = res.data || []; |
| | | } |
| | | } catch (error) { |
| | | console.error("è·åææ¡£å表失败", error); |
| | | } |
| | | }; |
| | | |
| | | // ææ¡£éæ©ç¡®è®¤ |
| | | const onDocSelect = (e) => { |
| | | form.value.documentationId = e.id; |
| | | displayDocName.value = e.name; |
| | | showDocPicker.value = false; |
| | | }; |
| | | |
| | | // åé
æ¥æç¡®è®¤ |
| | | const onBorrowDateConfirm = (e) => { |
| | | const date = new Date(e.value); |
| | | form.value.borrowDate = formatDate(date); |
| | | showBorrowDatePicker.value = false; |
| | | }; |
| | | |
| | | // åºå½è¿æ¥æç¡®è®¤ |
| | | const onDueDateConfirm = (e) => { |
| | | const date = new Date(e.value); |
| | | form.value.dueReturnDate = formatDate(date); |
| | | showDueDatePicker.value = false; |
| | | }; |
| | | |
| | | // æ ¼å¼åæ¥æ |
| | | const formatDate = (date) => { |
| | | const year = date.getFullYear(); |
| | | const month = String(date.getMonth() + 1).padStart(2, "0"); |
| | | const day = String(date.getDate()).padStart(2, "0"); |
| | | return `${year}-${month}-${day}`; |
| | | }; |
| | | |
| | | // æäº¤è¡¨å |
| | | const handleSubmit = () => { |
| | | // 妿已å½è¿ï¼ç¦æ¢æäº¤ |
| | | if (isReturned.value) { |
| | | uni.showToast({ title: "å·²å½è¿çåé
è®°å½ä¸è½ç¼è¾", icon: "none" }); |
| | | return; |
| | | } |
| | | |
| | | formRef.value |
| | | .validate() |
| | | .then(async () => { |
| | | try { |
| | | loading.value = true; |
| | | |
| | | if (isEdit.value) { |
| | | // ç¼è¾æ¨¡å¼ |
| | | const res = await updateBorrow({ |
| | | id: form.value.id, |
| | | borrower: form.value.borrower, |
| | | borrowPurpose: form.value.borrowPurpose, |
| | | borrowDate: form.value.borrowDate, |
| | | dueReturnDate: form.value.dueReturnDate, |
| | | remark: form.value.remark, |
| | | }); |
| | | |
| | | if (res.code === 200) { |
| | | uni.showToast({ title: "ç¼è¾æå", icon: "success" }); |
| | | setTimeout(() => { |
| | | goBack(); |
| | | }, 1500); |
| | | } else { |
| | | uni.showToast({ title: res.msg || "ç¼è¾å¤±è´¥", icon: "none" }); |
| | | } |
| | | } else { |
| | | // æ°å¢æ¨¡å¼ |
| | | const res = await addBorrow({ |
| | | documentationId: form.value.documentationId, |
| | | borrower: form.value.borrower, |
| | | borrowPurpose: form.value.borrowPurpose, |
| | | borrowDate: form.value.borrowDate, |
| | | dueReturnDate: form.value.dueReturnDate, |
| | | borrowStatus: "åé
", |
| | | remark: form.value.remark, |
| | | }); |
| | | |
| | | if (res.code === 200) { |
| | | uni.showToast({ title: "æ°å¢æå", icon: "success" }); |
| | | setTimeout(() => { |
| | | goBack(); |
| | | }, 1500); |
| | | } else { |
| | | uni.showToast({ title: res.msg || "æ°å¢å¤±è´¥", icon: "none" }); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | uni.showToast({ title: "æä½å¤±è´¥", icon: "none" }); |
| | | } finally { |
| | | loading.value = false; |
| | | } |
| | | }) |
| | | .catch(() => { |
| | | // éªè¯å¤±è´¥ |
| | | }); |
| | | }; |
| | | |
| | | // 页é¢å è½½ |
| | | onLoad((options) => { |
| | | if (options.id) { |
| | | // ç¼è¾æ¨¡å¼ |
| | | isEdit.value = true; |
| | | borrowId.value = options.id; |
| | | |
| | | // ä» storage è·åç¼è¾æ°æ® |
| | | const editDataStr = uni.getStorageSync("borrowEditData"); |
| | | if (editDataStr) { |
| | | try { |
| | | const data = JSON.parse(editDataStr); |
| | | Object.assign(form.value, data); |
| | | borrowDateValue.value = new Date(data.borrowDate).getTime(); |
| | | dueReturnDateValue.value = new Date(data.dueReturnDate).getTime(); |
| | | // ç´æ¥ä½¿ç¨ä¼ éçææ¡£åç§°æ¾ç¤ºï¼å°è¯å¤ä¸ªå¯è½çåæ®µå |
| | | displayDocName.value = data.docName || data.documentationName || data.fileName || data.name || ""; |
| | | } catch (e) { |
| | | console.error("è§£æç¼è¾æ°æ®å¤±è´¥", e); |
| | | } |
| | | } |
| | | } else { |
| | | // æ°å¢æ¨¡å¼ï¼å è½½ææ¡£å表并设置é»è®¤æ¥æ |
| | | loadDocumentList(); |
| | | const today = new Date(); |
| | | form.value.borrowDate = formatDate(today); |
| | | borrowDateValue.value = today.getTime(); |
| | | } |
| | | }); |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | @import "@/static/scss/form-common.scss"; |
| | | |
| | | .borrow-edit { |
| | | min-height: 100vh; |
| | | background: #f5f5f5; |
| | | } |
| | | </style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <view class="sales-account"> |
| | | <!-- 使ç¨éç¨é¡µé¢å¤´é¨ç»ä»¶ --> |
| | | <PageHeader title="åé
管ç" @back="goBack" /> |
| | | |
| | | <!-- æç´¢åçéåºå --> |
| | | <view class="search-section"> |
| | | <view class="search-bar"> |
| | | <view class="search-input"> |
| | | <up-input |
| | | class="search-text" |
| | | placeholder="请è¾å
¥åé
人æç´¢" |
| | | v-model="searchForm.borrower" |
| | | @change="getList" |
| | | clearable |
| | | /> |
| | | </view> |
| | | <view class="filter-button" @click="getList"> |
| | | <up-icon name="search" size="24" color="#999"></up-icon> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | |
| | | <!-- åé
å表 --> |
| | | <view class="ledger-list" v-if="borrowList.length > 0"> |
| | | <view v-for="(item, index) in borrowList" :key="index"> |
| | | <view class="ledger-item"> |
| | | <view class="item-header"> |
| | | <view class="item-left"> |
| | | <view class="document-icon"> |
| | | <up-icon name="file-text" size="16" color="#ffffff"></up-icon> |
| | | </view> |
| | | <text class="item-id">{{ item.docName || '-' }}</text> |
| | | </view> |
| | | <view class="item-tag" :class="getStatusClass(item.borrowStatus)"> |
| | | <text class="tag-text">{{ item.borrowStatus }}</text> |
| | | </view> |
| | | </view> |
| | | <up-divider></up-divider> |
| | | <view class="item-details"> |
| | | <view class="detail-row"> |
| | | <text class="detail-label">åé
人</text> |
| | | <text class="detail-value">{{ item.borrower || '-' }}</text> |
| | | </view> |
| | | <view class="detail-row"> |
| | | <text class="detail-label">åé
ç®ç</text> |
| | | <text class="detail-value">{{ item.borrowPurpose || '-' }}</text> |
| | | </view> |
| | | <view class="detail-row"> |
| | | <text class="detail-label">åé
æ¥æ</text> |
| | | <text class="detail-value">{{ item.borrowDate || '-' }}</text> |
| | | </view> |
| | | <view class="detail-row"> |
| | | <text class="detail-label">åºå½è¿æ¥æ</text> |
| | | <text class="detail-value">{{ item.dueReturnDate || '-' }}</text> |
| | | </view> |
| | | <view class="detail-row" v-if="item.remark"> |
| | | <text class="detail-label">夿³¨</text> |
| | | <text class="detail-value">{{ item.remark }}</text> |
| | | </view> |
| | | </view> |
| | | <up-divider></up-divider> |
| | | <view class="detail-buttons"> |
| | | <u-button |
| | | v-if="item.borrowStatus !== 'å½è¿'" |
| | | class="detail-button" |
| | | size="small" |
| | | type="primary" |
| | | @click.stop="goEdit(item)" |
| | | > |
| | | ç¼è¾ |
| | | </u-button> |
| | | <u-button |
| | | v-if="item.borrowStatus !== 'å½è¿'" |
| | | class="detail-button" |
| | | size="small" |
| | | type="error" |
| | | plain |
| | | @click.stop="handleDelete(item)" |
| | | > |
| | | å é¤ |
| | | </u-button> |
| | | <u-button |
| | | v-if="item.borrowStatus === 'å½è¿'" |
| | | class="detail-button" |
| | | size="small" |
| | | type="primary" |
| | | plain |
| | | @click.stop="goView(item)" |
| | | > |
| | | æ¥ç |
| | | </u-button> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | |
| | | <view v-else class="no-data"> |
| | | <text>ææ åé
è®°å½</text> |
| | | </view> |
| | | |
| | | <!-- æµ®å¨æä½æé® --> |
| | | <view class="fab-button" @click="goAdd"> |
| | | <up-icon name="plus" size="24" color="#ffffff"></up-icon> |
| | | </view> |
| | | </view> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { ref, reactive } from "vue"; |
| | | import { onShow } from "@dcloudio/uni-app"; |
| | | import PageHeader from "@/components/PageHeader.vue"; |
| | | import { getBorrowList, deleteBorrow } from "@/api/fileManagement/borrow"; |
| | | |
| | | // æ¥è¯¢è¡¨å |
| | | const searchForm = reactive({ |
| | | borrower: "", |
| | | }); |
| | | |
| | | // åé
åè¡¨æ°æ® |
| | | const borrowList = ref([]); |
| | | |
| | | // å页ç¸å
³ |
| | | const pagination = reactive({ |
| | | currentPage: 1, |
| | | pageSize: 10, |
| | | total: 0, |
| | | }); |
| | | |
| | | // è¿åä¸ä¸é¡µ |
| | | const goBack = () => { |
| | | uni.navigateBack(); |
| | | }; |
| | | |
| | | // è·åç¶ææ ·å¼ç±» |
| | | const getStatusClass = (status) => { |
| | | if (status === "å½è¿") return "tag-success"; |
| | | if (status === "åé
") return "tag-warning"; |
| | | return "tag-default"; |
| | | }; |
| | | |
| | | // å è½½åé
å表 |
| | | const getList = async () => { |
| | | uni.showLoading({ title: "å è½½ä¸...", mask: true }); |
| | | |
| | | const query = { |
| | | page: -1, |
| | | size: -1, |
| | | borrower: searchForm.borrower || undefined, |
| | | }; |
| | | |
| | | try { |
| | | const res = await getBorrowList(query); |
| | | if (res.code === 200) { |
| | | borrowList.value = res.data.records || []; |
| | | pagination.total = res.data.total || 0; |
| | | } else { |
| | | uni.showToast({ title: res.msg || "è·ååé
å表失败", icon: "none" }); |
| | | borrowList.value = []; |
| | | } |
| | | } catch (error) { |
| | | uni.showToast({ title: "è·ååé
å表失败", icon: "none" }); |
| | | borrowList.value = []; |
| | | } finally { |
| | | uni.hideLoading(); |
| | | } |
| | | }; |
| | | |
| | | // è·³è½¬å°æ°å¢é¡µé¢ |
| | | const goAdd = () => { |
| | | uni.navigateTo({ |
| | | url: "/pages/fileManagement/borrow/edit", |
| | | }); |
| | | }; |
| | | |
| | | // 跳转å°ç¼è¾é¡µé¢ |
| | | const goEdit = (item) => { |
| | | uni.setStorageSync("borrowEditData", JSON.stringify(item)); |
| | | uni.navigateTo({ |
| | | url: `/pages/fileManagement/borrow/edit?id=${item.id}`, |
| | | }); |
| | | }; |
| | | |
| | | // è·³è½¬å°æ¥ç页é¢ï¼å·²å½è¿è®°å½ï¼ |
| | | const goView = (item) => { |
| | | uni.setStorageSync("borrowEditData", JSON.stringify(item)); |
| | | uni.navigateTo({ |
| | | url: `/pages/fileManagement/borrow/edit?id=${item.id}`, |
| | | }); |
| | | }; |
| | | |
| | | // å é¤ |
| | | const handleDelete = (row) => { |
| | | uni.showModal({ |
| | | title: "å é¤ç¡®è®¤", |
| | | content: "éä¸çå
容å°è¢«å é¤ï¼æ¯å¦ç¡®è®¤å é¤ï¼", |
| | | confirmText: "确认", |
| | | cancelText: "åæ¶", |
| | | success: async (res) => { |
| | | if (res.confirm) { |
| | | try { |
| | | uni.showLoading({ title: "å é¤ä¸...", mask: true }); |
| | | const result = await deleteBorrow([row.id]); |
| | | if (result.code === 200) { |
| | | uni.showToast({ title: "å 餿å", icon: "success" }); |
| | | getList(); |
| | | } else { |
| | | uni.showToast({ title: result.msg || "å é¤å¤±è´¥", icon: "none" }); |
| | | } |
| | | } catch (error) { |
| | | uni.showToast({ title: "å é¤å¤±è´¥", icon: "none" }); |
| | | } finally { |
| | | uni.hideLoading(); |
| | | } |
| | | } |
| | | }, |
| | | }); |
| | | }; |
| | | |
| | | onShow(() => { |
| | | getList(); |
| | | }); |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | @import "@/styles/sales-common.scss"; |
| | | |
| | | // æ ç¾æ ·å¼ |
| | | .item-tag { |
| | | border-radius: 4px; |
| | | padding: 2px 8px; |
| | | |
| | | &.tag-success { |
| | | background: #4caf50; |
| | | } |
| | | |
| | | &.tag-warning { |
| | | background: #ff9800; |
| | | } |
| | | |
| | | &.tag-default { |
| | | background: #9e9e9e; |
| | | } |
| | | } |
| | | |
| | | .tag-text { |
| | | font-size: 11px; |
| | | color: #ffffff; |
| | | font-weight: 500; |
| | | } |
| | | |
| | | // æé®æ ·å¼ |
| | | .detail-buttons { |
| | | padding: 12px 0; |
| | | display: flex; |
| | | gap: 12px; |
| | | } |
| | | |
| | | .detail-button { |
| | | flex: 1; |
| | | } |
| | | </style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <view class="return-edit"> |
| | | <PageHeader :title="pageTitle" @back="goBack" /> |
| | | |
| | | <up-form |
| | | ref="formRef" |
| | | :model="form" |
| | | :rules="rules" |
| | | label-width="110" |
| | | > |
| | | <up-form-item label="ææ¡£" prop="borrowId" required> |
| | | <up-input |
| | | v-model="displayDocName" |
| | | placeholder="è¯·éæ©ææ¡£" |
| | | readonly |
| | | :disabled="isEdit" |
| | | @click="!isEdit && (showDocPicker = true)" |
| | | /> |
| | | <template #right> |
| | | <up-icon v-if="!isEdit" name="arrow-right" @click="showDocPicker = true"></up-icon> |
| | | </template> |
| | | </up-form-item> |
| | | |
| | | <up-form-item label="åé
人" prop="borrower"> |
| | | <up-input |
| | | v-model="form.borrower" |
| | | placeholder="éæ©ææ¡£åèªå¨å¸¦åº" |
| | | disabled |
| | | /> |
| | | </up-form-item> |
| | | |
| | | <up-form-item label="å½è¿äºº" prop="returner" required> |
| | | <up-input |
| | | v-model="form.returner" |
| | | placeholder="请è¾å
¥å½è¿äºº" |
| | | clearable |
| | | :disabled="isReturned" |
| | | /> |
| | | </up-form-item> |
| | | |
| | | <up-form-item label="å½è¿æ¥æ" prop="returnDate" required> |
| | | <up-input |
| | | v-model="form.returnDate" |
| | | placeholder="è¯·éæ©å½è¿æ¥æ" |
| | | readonly |
| | | @click="!isReturned && (showReturnDatePicker = true)" |
| | | :disabled="isReturned" |
| | | /> |
| | | <template #right> |
| | | <up-icon name="arrow-right" @click="!isReturned && (showReturnDatePicker = true)"></up-icon> |
| | | </template> |
| | | </up-form-item> |
| | | |
| | | <up-form-item label="åºå½è¿æ¥æ" prop="dueReturnDate"> |
| | | <up-input |
| | | v-model="form.dueReturnDate" |
| | | placeholder="éæ©ææ¡£åèªå¨å¸¦åº" |
| | | disabled |
| | | /> |
| | | </up-form-item> |
| | | |
| | | <up-form-item label="夿³¨è¯´æ" prop="remark"> |
| | | <up-textarea |
| | | v-model="form.remark" |
| | | placeholder="请è¾å
¥å¤æ³¨è¯´æ" |
| | | height="80" |
| | | border="none" |
| | | :disabled="isReturned" |
| | | /> |
| | | </up-form-item> |
| | | </up-form> |
| | | |
| | | <FooterButtons |
| | | v-if="!isReturned" |
| | | :loading="loading" |
| | | :confirmText="isEdit ? 'ä¿å' : 'æ°å¢'" |
| | | @cancel="goBack" |
| | | @confirm="handleSubmit" |
| | | /> |
| | | |
| | | <!-- ææ¡£éæ©å¨ --> |
| | | <up-action-sheet |
| | | :show="showDocPicker" |
| | | :actions="documentOptions" |
| | | title="éæ©ææ¡£" |
| | | @select="onDocSelect" |
| | | @close="showDocPicker = false" |
| | | /> |
| | | |
| | | <!-- å½è¿æ¥æéæ©å¨ --> |
| | | <up-popup :show="showReturnDatePicker" mode="bottom" @close="showReturnDatePicker = false"> |
| | | <up-datetime-picker |
| | | :show="true" |
| | | v-model="returnDateValue" |
| | | @confirm="onReturnDateConfirm" |
| | | @cancel="showReturnDatePicker = false" |
| | | mode="date" |
| | | /> |
| | | </up-popup> |
| | | </view> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { ref, computed, onMounted } from "vue"; |
| | | import { onLoad } from "@dcloudio/uni-app"; |
| | | import PageHeader from "@/components/PageHeader.vue"; |
| | | import FooterButtons from "@/components/FooterButtons.vue"; |
| | | import { returnDocument, reventUpdate, getDocumentList } from "@/api/fileManagement/return"; |
| | | |
| | | const formRef = ref(); |
| | | const loading = ref(false); |
| | | const returnId = ref(""); |
| | | const isEdit = ref(false); |
| | | |
| | | // å¼¹çªæ¾ç¤ºç¶æ |
| | | const showDocPicker = ref(false); |
| | | const showReturnDatePicker = ref(false); |
| | | |
| | | // æ°æ® |
| | | const documentList = ref([]); |
| | | const returnDateValue = ref(Date.now()); |
| | | const displayDocName = ref(""); // ç¨äºæ¾ç¤ºçææ¡£åç§° |
| | | |
| | | const form = ref({ |
| | | id: "", |
| | | borrowId: "", |
| | | documentationId: "", |
| | | borrower: "", |
| | | returner: "", |
| | | borrowStatus: "", |
| | | returnDate: "", |
| | | dueReturnDate: "", |
| | | remark: "", |
| | | }); |
| | | |
| | | const rules = { |
| | | borrowId: [{ required: true, message: "è¯·éæ©ææ¡£", trigger: "change" }], |
| | | returner: [{ required: true, message: "请è¾å
¥å½è¿äºº", trigger: "blur" }], |
| | | returnDate: [{ required: true, message: "è¯·éæ©å½è¿æ¥æ", trigger: "change" }], |
| | | }; |
| | | |
| | | // 页颿 é¢ |
| | | const pageTitle = computed(() => { |
| | | if (isEdit.value) { |
| | | return form.value.borrowStatus === "å½è¿" ? "å½è¿è¯¦æ
" : "ç¼è¾å½è¿"; |
| | | } |
| | | return "æ°å¢å½è¿"; |
| | | }); |
| | | |
| | | // æ¯å¦å·²å½è¿ |
| | | const isReturned = computed(() => { |
| | | return form.value.borrowStatus === "å½è¿"; |
| | | }); |
| | | |
| | | // ææ¡£é项ï¼ä»
æ°å¢æ¨¡å¼ä½¿ç¨ï¼ |
| | | const documentOptions = computed(() => { |
| | | return documentList.value.map((item) => ({ |
| | | name: item.docName || item.name, |
| | | id: item.id, |
| | | borrower: item.borrower, |
| | | dueReturnDate: item.dueReturnDate, |
| | | })); |
| | | }); |
| | | |
| | | // è¿åä¸ä¸é¡µ |
| | | const goBack = () => { |
| | | uni.removeStorageSync("returnEditData"); |
| | | uni.navigateBack(); |
| | | }; |
| | | |
| | | // å è½½ææ¡£å表ï¼ä»
æ°å¢æ¨¡å¼éè¦ï¼ |
| | | const loadDocumentList = async () => { |
| | | try { |
| | | const res = await getDocumentList(); |
| | | if (res.code === 200) { |
| | | documentList.value = res.data || []; |
| | | } |
| | | } catch (error) { |
| | | console.error("è·åææ¡£å表失败", error); |
| | | } |
| | | }; |
| | | |
| | | // ææ¡£éæ©ç¡®è®¤ |
| | | const onDocSelect = (e) => { |
| | | form.value.borrowId = e.id; |
| | | form.value.documentationId = e.id; |
| | | displayDocName.value = e.name; |
| | | // èªå¨å¸¦åºåé
人ååºå½è¿æ¥æ |
| | | form.value.borrower = e.borrower || ""; |
| | | form.value.dueReturnDate = e.dueReturnDate || ""; |
| | | showDocPicker.value = false; |
| | | }; |
| | | |
| | | // å½è¿æ¥æç¡®è®¤ |
| | | const onReturnDateConfirm = (e) => { |
| | | const date = new Date(e.value); |
| | | form.value.returnDate = formatDate(date); |
| | | showReturnDatePicker.value = false; |
| | | }; |
| | | |
| | | // æ ¼å¼åæ¥æ |
| | | const formatDate = (date) => { |
| | | const year = date.getFullYear(); |
| | | const month = String(date.getMonth() + 1).padStart(2, "0"); |
| | | const day = String(date.getDate()).padStart(2, "0"); |
| | | return `${year}-${month}-${day}`; |
| | | }; |
| | | |
| | | // æäº¤è¡¨å |
| | | const handleSubmit = () => { |
| | | // 妿已å½è¿ï¼ç¦æ¢æäº¤ |
| | | if (isReturned.value) { |
| | | uni.showToast({ title: "å·²å½è¿çè®°å½ä¸è½ç¼è¾", icon: "none" }); |
| | | return; |
| | | } |
| | | |
| | | formRef.value |
| | | .validate() |
| | | .then(async () => { |
| | | try { |
| | | loading.value = true; |
| | | |
| | | if (isEdit.value) { |
| | | // ç¼è¾æ¨¡å¼ |
| | | const res = await reventUpdate({ |
| | | id: form.value.id, |
| | | documentationId: form.value.documentationId, |
| | | borrower: form.value.borrower, |
| | | returner: form.value.returner, |
| | | borrowStatus: form.value.borrowStatus, |
| | | returnDate: form.value.returnDate, |
| | | dueReturnDate: form.value.dueReturnDate, |
| | | remark: form.value.remark, |
| | | }); |
| | | |
| | | if (res.code === 200) { |
| | | uni.showToast({ title: "ç¼è¾æå", icon: "success" }); |
| | | setTimeout(() => { |
| | | goBack(); |
| | | }, 1500); |
| | | } else { |
| | | uni.showToast({ title: res.msg || "ç¼è¾å¤±è´¥", icon: "none" }); |
| | | } |
| | | } else { |
| | | // æ°å¢æ¨¡å¼ |
| | | const res = await returnDocument({ |
| | | borrowId: form.value.borrowId, |
| | | borrower: form.value.borrower, |
| | | returner: form.value.returner, |
| | | borrowStatus: "å½è¿", |
| | | returnDate: form.value.returnDate, |
| | | dueReturnDate: form.value.dueReturnDate, |
| | | remark: form.value.remark, |
| | | }); |
| | | |
| | | if (res.code === 200) { |
| | | uni.showToast({ title: "æ°å¢æå", icon: "success" }); |
| | | setTimeout(() => { |
| | | goBack(); |
| | | }, 1500); |
| | | } else { |
| | | uni.showToast({ title: res.msg || "æ°å¢å¤±è´¥", icon: "none" }); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | uni.showToast({ title: "æä½å¤±è´¥", icon: "none" }); |
| | | } finally { |
| | | loading.value = false; |
| | | } |
| | | }) |
| | | .catch(() => { |
| | | // éªè¯å¤±è´¥ |
| | | }); |
| | | }; |
| | | |
| | | // 页é¢å è½½ |
| | | onLoad((options) => { |
| | | if (options.id) { |
| | | // ç¼è¾æ¨¡å¼ |
| | | isEdit.value = true; |
| | | returnId.value = options.id; |
| | | |
| | | // ä» storage è·åç¼è¾æ°æ® |
| | | const editDataStr = uni.getStorageSync("returnEditData"); |
| | | if (editDataStr) { |
| | | try { |
| | | const data = JSON.parse(editDataStr); |
| | | Object.assign(form.value, data); |
| | | returnDateValue.value = new Date(data.returnDate).getTime(); |
| | | // ç´æ¥ä½¿ç¨ä¼ éç docName æ¾ç¤º |
| | | displayDocName.value = data.docName || ""; |
| | | } catch (e) { |
| | | console.error("è§£æç¼è¾æ°æ®å¤±è´¥", e); |
| | | } |
| | | } |
| | | } else { |
| | | // æ°å¢æ¨¡å¼ï¼å è½½ææ¡£å表并设置é»è®¤æ¥æ |
| | | loadDocumentList(); |
| | | const today = new Date(); |
| | | form.value.returnDate = formatDate(today); |
| | | returnDateValue.value = today.getTime(); |
| | | } |
| | | }); |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | @import "@/static/scss/form-common.scss"; |
| | | |
| | | .return-edit { |
| | | min-height: 100vh; |
| | | background: #f5f5f5; |
| | | } |
| | | </style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <view class="sales-account"> |
| | | <!-- 使ç¨éç¨é¡µé¢å¤´é¨ç»ä»¶ --> |
| | | <PageHeader title="å½è¿ç®¡ç" @back="goBack" /> |
| | | |
| | | <!-- æç´¢åçéåºå --> |
| | | <view class="search-section"> |
| | | <view class="search-bar"> |
| | | <view class="search-input"> |
| | | <up-input |
| | | class="search-text" |
| | | placeholder="请è¾å
¥åé
人æç´¢" |
| | | v-model="searchForm.borrower" |
| | | @change="getList" |
| | | clearable |
| | | /> |
| | | </view> |
| | | <view class="filter-button" @click="getList"> |
| | | <up-icon name="search" size="24" color="#999"></up-icon> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | |
| | | <!-- å½è¿å表 --> |
| | | <view class="ledger-list" v-if="returnList.length > 0"> |
| | | <view v-for="(item, index) in returnList" :key="index"> |
| | | <view class="ledger-item"> |
| | | <view class="item-header"> |
| | | <view class="item-left"> |
| | | <view class="document-icon"> |
| | | <up-icon name="file-text" size="16" color="#ffffff"></up-icon> |
| | | </view> |
| | | <text class="item-id">{{ item.docName || '-' }}</text> |
| | | </view> |
| | | <view class="item-tag" :class="getStatusClass(item.borrowStatus)"> |
| | | <text class="tag-text">{{ item.borrowStatus }}</text> |
| | | </view> |
| | | </view> |
| | | <up-divider></up-divider> |
| | | <view class="item-details"> |
| | | <view class="detail-row"> |
| | | <text class="detail-label">åé
人</text> |
| | | <text class="detail-value">{{ item.borrower || '-' }}</text> |
| | | </view> |
| | | <view class="detail-row"> |
| | | <text class="detail-label">å½è¿äºº</text> |
| | | <text class="detail-value">{{ item.returner || '-' }}</text> |
| | | </view> |
| | | <view class="detail-row"> |
| | | <text class="detail-label">å½è¿æ¥æ</text> |
| | | <text class="detail-value">{{ item.returnDate || '-' }}</text> |
| | | </view> |
| | | <view class="detail-row"> |
| | | <text class="detail-label">åºå½è¿æ¥æ</text> |
| | | <text class="detail-value">{{ item.dueReturnDate || '-' }}</text> |
| | | </view> |
| | | <view class="detail-row" v-if="item.remark"> |
| | | <text class="detail-label">夿³¨</text> |
| | | <text class="detail-value">{{ item.remark }}</text> |
| | | </view> |
| | | </view> |
| | | <up-divider></up-divider> |
| | | <view class="detail-buttons"> |
| | | <u-button |
| | | v-if="item.borrowStatus !== 'å½è¿'" |
| | | class="detail-button" |
| | | size="small" |
| | | type="primary" |
| | | @click.stop="goEdit(item)" |
| | | > |
| | | ç¼è¾ |
| | | </u-button> |
| | | <u-button |
| | | v-if="item.borrowStatus !== 'å½è¿'" |
| | | class="detail-button" |
| | | size="small" |
| | | type="error" |
| | | plain |
| | | @click.stop="handleDelete(item)" |
| | | > |
| | | å é¤ |
| | | </u-button> |
| | | <u-button |
| | | v-if="item.borrowStatus === 'å½è¿'" |
| | | class="detail-button" |
| | | size="small" |
| | | type="primary" |
| | | plain |
| | | @click.stop="goView(item)" |
| | | > |
| | | æ¥ç |
| | | </u-button> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | |
| | | <view v-else class="no-data"> |
| | | <text>ææ å½è¿è®°å½</text> |
| | | </view> |
| | | |
| | | <!-- æµ®å¨æä½æé® --> |
| | | <view class="fab-button" @click="goAdd"> |
| | | <up-icon name="plus" size="24" color="#ffffff"></up-icon> |
| | | </view> |
| | | </view> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { ref, reactive } from "vue"; |
| | | import { onShow } from "@dcloudio/uni-app"; |
| | | import PageHeader from "@/components/PageHeader.vue"; |
| | | import { getReturnListPage, deleteReturn } from "@/api/fileManagement/return"; |
| | | |
| | | // æ¥è¯¢è¡¨å |
| | | const searchForm = reactive({ |
| | | borrower: "", |
| | | }); |
| | | |
| | | // å½è¿åè¡¨æ°æ® |
| | | const returnList = ref([]); |
| | | |
| | | // å页ç¸å
³ |
| | | const pagination = reactive({ |
| | | currentPage: 1, |
| | | pageSize: 10, |
| | | total: 0, |
| | | }); |
| | | |
| | | // è¿åä¸ä¸é¡µ |
| | | const goBack = () => { |
| | | uni.navigateBack(); |
| | | }; |
| | | |
| | | // è·åç¶ææ ·å¼ç±» |
| | | const getStatusClass = (status) => { |
| | | if (status === "å½è¿") return "tag-success"; |
| | | if (status === "åé
") return "tag-warning"; |
| | | return "tag-default"; |
| | | }; |
| | | |
| | | // å è½½å½è¿å表 |
| | | const getList = async () => { |
| | | uni.showLoading({ title: "å è½½ä¸...", mask: true }); |
| | | |
| | | const query = { |
| | | page: -1, |
| | | size: -1, |
| | | borrower: searchForm.borrower || undefined, |
| | | }; |
| | | |
| | | try { |
| | | const res = await getReturnListPage(query); |
| | | if (res.code === 200) { |
| | | returnList.value = res.data.records || []; |
| | | pagination.total = res.data.total || 0; |
| | | } else { |
| | | uni.showToast({ title: res.msg || "è·åå½è¿å表失败", icon: "none" }); |
| | | returnList.value = []; |
| | | } |
| | | } catch (error) { |
| | | uni.showToast({ title: "è·åå½è¿å表失败", icon: "none" }); |
| | | returnList.value = []; |
| | | } finally { |
| | | uni.hideLoading(); |
| | | } |
| | | }; |
| | | |
| | | // è·³è½¬å°æ°å¢é¡µé¢ |
| | | const goAdd = () => { |
| | | uni.navigateTo({ |
| | | url: "/pages/fileManagement/return/edit", |
| | | }); |
| | | }; |
| | | |
| | | // 跳转å°ç¼è¾é¡µé¢ |
| | | const goEdit = (item) => { |
| | | uni.setStorageSync("returnEditData", JSON.stringify(item)); |
| | | uni.navigateTo({ |
| | | url: `/pages/fileManagement/return/edit?id=${item.id}`, |
| | | }); |
| | | }; |
| | | |
| | | // è·³è½¬å°æ¥ç页é¢ï¼å·²å½è¿è®°å½ï¼ |
| | | const goView = (item) => { |
| | | uni.setStorageSync("returnEditData", JSON.stringify(item)); |
| | | uni.navigateTo({ |
| | | url: `/pages/fileManagement/return/edit?id=${item.id}`, |
| | | }); |
| | | }; |
| | | |
| | | // å é¤ |
| | | const handleDelete = (row) => { |
| | | uni.showModal({ |
| | | title: "å é¤ç¡®è®¤", |
| | | content: "éä¸çå
容å°è¢«å é¤ï¼æ¯å¦ç¡®è®¤å é¤ï¼", |
| | | confirmText: "确认", |
| | | cancelText: "åæ¶", |
| | | success: async (res) => { |
| | | if (res.confirm) { |
| | | try { |
| | | uni.showLoading({ title: "å é¤ä¸...", mask: true }); |
| | | const result = await deleteReturn([row.id]); |
| | | if (result.code === 200) { |
| | | uni.showToast({ title: "å 餿å", icon: "success" }); |
| | | getList(); |
| | | } else { |
| | | uni.showToast({ title: result.msg || "å é¤å¤±è´¥", icon: "none" }); |
| | | } |
| | | } catch (error) { |
| | | uni.showToast({ title: "å é¤å¤±è´¥", icon: "none" }); |
| | | } finally { |
| | | uni.hideLoading(); |
| | | } |
| | | } |
| | | }, |
| | | }); |
| | | }; |
| | | |
| | | onShow(() => { |
| | | getList(); |
| | | }); |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | @import "@/styles/sales-common.scss"; |
| | | |
| | | // æ ç¾æ ·å¼ |
| | | .item-tag { |
| | | border-radius: 4px; |
| | | padding: 2px 8px; |
| | | |
| | | &.tag-success { |
| | | background: #4caf50; |
| | | } |
| | | |
| | | &.tag-warning { |
| | | background: #ff9800; |
| | | } |
| | | |
| | | &.tag-default { |
| | | background: #9e9e9e; |
| | | } |
| | | } |
| | | |
| | | .tag-text { |
| | | font-size: 11px; |
| | | color: #ffffff; |
| | | font-weight: 500; |
| | | } |
| | | |
| | | // æé®æ ·å¼ |
| | | .detail-buttons { |
| | | padding: 12px 0; |
| | | display: flex; |
| | | gap: 12px; |
| | | } |
| | | |
| | | .detail-button { |
| | | flex: 1; |
| | | } |
| | | </style> |
| | |
| | | |
| | | <script setup> |
| | | import { ref, onMounted, nextTick, reactive, computed } from "vue"; |
| | | import { onShow } from "@dcloudio/uni-app"; |
| | | import { userLoginFacotryList } from "@/api/login"; |
| | | import { getProductWorkOrderById } from "@/api/productionManagement/productionReporting"; |
| | | import { createVersionUpgradeChecker } from "@/utils/versionUpgrade"; |
| | | import DownloadProgressMask from "@/components/DownloadProgressMask.vue"; |
| | | import modal from "@/plugins/modal"; |
| | | import useUserStore from "@/store/modules/user"; |
| | | |
| | | const userStore = useUserStore(); |
| | | const { triggerVersionCheck } = createVersionUpgradeChecker({ logPrefix: "[version-works]" }); |
| | | const show = ref(false); |
| | | const factoryList = ref([]); |
| | | const factoryListTem = ref([]); |
| | |
| | | icon: "/static/images/icon/caigouguanli.svg", |
| | | label: "éè´éè´§", |
| | | }, |
| | | { |
| | | icon: "/static/images/icon/gongyingshangdangan.svg", |
| | | label: "ä¾åºåæ¡£æ¡", |
| | | }, |
| | | ]); |
| | | |
| | | // è´¢å¡ç®¡çåè½æ°æ® |
| | |
| | | const archiveManagementItems = reactive([ |
| | | { |
| | | icon: "/static/images/icon/gongyingshangdangan.svg", |
| | | label: "ä¾åºåæ¡£æ¡", |
| | | label: "åé
ç»è®°", |
| | | }, |
| | | ]); |
| | | { |
| | | icon: "/static/images/icon/hetongguanli.svg", |
| | | label: "å½è¿ç»è®°", |
| | | } |
| | | ]) |
| | | |
| | | // å®åæå¡åè½æ°æ® |
| | | const afterSalesServiceItems = reactive([ |
| | |
| | | url: "/pages/customerService/afterSalesHandling/index", |
| | | }); |
| | | break; |
| | | case "åé
ç»è®°": |
| | | uni.navigateTo({ |
| | | url: "/pages/fileManagement/borrow/index", |
| | | }); |
| | | break; |
| | | case "å½è¿ç»è®°": |
| | | uni.navigateTo({ |
| | | url: "/pages/fileManagement/return/index", |
| | | }); |
| | | break; |
| | | default: |
| | | uni.showToast({ |
| | | title: `ç¹å»äº${item.label}`, |
| | |
| | | // å®ä¹èåé
ç½®æ å° |
| | | const menuMapping = { |
| | | collaboration: { target: collaborationItems, specialMapping: { "è§ç« å¶åº¦": "è§ç« å¶åº¦ç®¡ç" } }, |
| | | archiveManagement: { target: archiveManagementItems, specialMapping: { "ä¾åºåæ¡£æ¡": "ä¾åºå管ç" } }, |
| | | purchase: { specialMapping: { "ä¾åºåæ¡£æ¡": "ä¾åºå管ç" } }, |
| | | }; |
| | | console.log(allowedMenuTitles) |
| | | // éç¨è¿æ»¤å½æ° |
| | |
| | | |
| | | // è¿æ»¤å个模å |
| | | filterArray(marketingItems); |
| | | filterArray(purchaseItems); |
| | | filterArray(purchaseItems, menuMapping.purchase.specialMapping); |
| | | filterArray(financeManagementItems); |
| | | filterArray(archiveManagementItems, menuMapping.archiveManagement.specialMapping); |
| | | filterArray(collaborationItems, menuMapping.collaboration.specialMapping); |
| | | filterArray(safetyItems); |
| | | filterArray(humanResourcesItems); |
| | |
| | | filterArray(qualityItems); |
| | | filterArray(productionItems); |
| | | filterArray(equipmentItems); |
| | | filterArray(archiveManagementItems); |
| | | }; |
| | | |
| | | // æ£æ¥æ¨¡åæ¯å¦æèå项éè¦æ¾ç¤º |
| | | const hasMarketingItems = computed(() => marketingItems.length > 0); |
| | | const hasPurchaseItems = computed(() => purchaseItems.length > 0); |
| | | const hasFinanceManagementItems = computed(() => financeManagementItems.length > 0); |
| | | const hasArchiveManagementItems = computed(() => archiveManagementItems.length > 0); |
| | | const hasAfterSalesServiceItems = computed(() => afterSalesServiceItems.length > 0); |
| | | const hasCollaborationItems = computed(() => collaborationItems.length > 0); |
| | | const hasSafetyItems = computed(() => safetyItems.length > 0); |
| | |
| | | const hasWarehouseLogisticsItems = computed(() => warehouseLogisticsItems.length > 0); |
| | | const hasProductionItems = computed(() => productionItems.length > 0); |
| | | const hasEquipmentItems = computed(() => equipmentItems.length > 0); |
| | | const hasArchiveManagementItems = computed(() => archiveManagementItems.length > 0); |
| | | |
| | | onMounted(() => { |
| | | triggerVersionCheck("onMounted"); |
| | | // æ¯æ¬¡è¿å
¥é¦é¡µé½å¼ºå¶å·æ°ç¨æ·ä¿¡æ¯åè·¯ç±æéï¼ä¸åæ¬å°ç¼å夿 |
| | | userStore.getInfo().then(() => { |
| | | userStore |
| | |
| | | getUserLoginFacotryList(); |
| | | // å¯å¨éç¥ç¶æå®æ¶å¨ |
| | | startStatusTimer(); |
| | | }); |
| | | |
| | | onShow(() => { |
| | | triggerVersionCheck("onShow"); |
| | | }); |
| | | </script> |
| | | |
| | |
| | | import config from "@/config"; |
| | | import { getAllVersion } from "@/api/viewIndex"; |
| | | import bus from "@/plugins/bus"; |
| | | let hasTriggeredVersionCheckInSession = false; |
| | | |
| | | function compareVersion(v1, v2) { |
| | | const s1 = String(v1 || "").replace(/[^\d.]/g, "").split(".").map((n) => Number(n) || 0); |
| | |
| | | let lastVersionCheckAt = 0; |
| | | |
| | | const triggerVersionCheck = async (from = "unknown") => { |
| | | if (hasTriggeredVersionCheckInSession) { |
| | | console.log(`${logPrefix} è·³è¿çæ¬æ£æ¥ï¼æ¬æ¬¡ä¼è¯å·²æ£æµè¿ï¼æ¥æº=${from}`); |
| | | return; |
| | | } |
| | | const now = Date.now(); |
| | | if (now - lastVersionCheckAt < throttleMs) { |
| | | console.log(`${logPrefix} è·³è¿é夿£æ¥ï¼æ¥æº=${from}`); |
| | | return; |
| | | } |
| | | lastVersionCheckAt = now; |
| | | hasTriggeredVersionCheckInSession = true; |
| | | console.log(`${logPrefix} 触åçæ¬æ£æ¥ï¼æ¥æº=${from}`); |
| | | const currentVersion = await getCurrentVersion(logPrefix); |
| | | await checkAppVersionUpgrade(logPrefix, currentVersion); |