| src/api/financialManagement/fixedAssets.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/financialManagement/fixedAssets/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/procurementManagement/advancedPriceManagement/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/procurementManagement/procurementLedger/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/salesManagement/salesLedger/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/api/financialManagement/fixedAssets.js
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,43 @@ import request from "@/utils/request"; // å页æ¥è¯¢åºå®èµäº§å表 export const listPage = (params) => { return request({ url: "/enterpriseFixedAssets/listPage", method: "get", params, }); }; // æ°å¢åºå®èµäº§ export function add(data) { return request({ url: "/enterpriseFixedAssets/add", method: "post", data: data, }); } // æ´æ°åºå®èµäº§ export function update(data) { return request({ url: "/enterpriseFixedAssets/update", method: "post", data: data, }); } // å é¤åºå®èµäº§ export const delFixedAssets = (query) => { return request({ url: `/enterpriseFixedAssets/delete`, method: "delete", data: query, }); }; // 导åºåºå®èµäº§ export const exportFixedAssets = (query) => { return request({ url: "/financial/fixedAssets/export", method: "post", data: query, responseType: "blob", }); }; src/views/financialManagement/fixedAssets/index.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,313 @@ <template> <div class="app-container"> <div class="search_form"> <div> <span class="search_title">èµäº§åç§°ï¼</span> <el-input v-model="searchForm.name" style="width: 240px" placeholder="请è¾å ¥" @change="handleQuery" clearable prefix-icon="Search" /> <el-button type="primary" @click="handleQuery" style="margin-left: 10px">æç´¢</el-button> </div> <div> <el-button type="primary" @click="openForm('add')">æ°å¢èµäº§</el-button> <el-button type="danger" plain @click="handleDelete">å é¤</el-button> </div> </div> <div class="table_list"> <el-table :data="tableData" border v-loading="tableLoading" @selection-change="handleSelectionChange" style="width: 100%" height="calc(100vh - 18.5em)"> <el-table-column align="center" type="selection" width="55" /> <el-table-column align="center" label="åºå·" type="index" width="60" /> <el-table-column label="èµäº§åç§°" prop="name" show-overflow-tooltip /> <el-table-column label="åå·" prop="model" show-overflow-tooltip /> <el-table-column label="ä»·æ ¼" prop="price" show-overflow-tooltip> <template #default="{ row }"> Â¥{{ row.price ? row.price.toFixed(2) : '0.00' }} </template> </el-table-column> <el-table-column label="ä½ç½®" prop="address" show-overflow-tooltip /> <el-table-column label="å建æ¶é´" prop="createTime" show-overflow-tooltip> <template #default="{ row }"> {{ row.createTime ? dayjs(row.createTime).format('YYYY-MM-DD HH:mm:ss') : '-' }} </template> </el-table-column> <el-table-column fixed="right" label="æä½" min-width="100" align="center"> <template #default="scope"> <el-button link type="primary" size="small" @click="openForm('edit', scope.row);">ç¼è¾</el-button> <el-button link type="danger" size="small" @click="handleDeleteSolo(scope.row)">å é¤</el-button> </template> </el-table-column> </el-table> <pagination v-show="total > 0" :total="total" layout="total, sizes, prev, pager, next, jumper" :page="page.current" :limit="page.size" @pagination="paginationChange" /> </div> <el-dialog v-model="dialogFormVisible" :title="operationType === 'add' ? 'æ°å¢åºå®èµäº§' : 'ç¼è¾åºå®èµäº§'" width="600px" @close="closeDia"> <el-form :model="form" label-width="100px" :rules="rules" ref="formRef"> <el-form-item label="èµäº§åç§°" prop="name"> <el-input v-model="form.name" placeholder="请è¾å ¥èµäº§åç§°" clearable /> </el-form-item> <el-form-item label="åå·" prop="model"> <el-input v-model="form.model" placeholder="请è¾å ¥åå·" clearable /> </el-form-item> <el-form-item label="ä»·æ ¼" prop="price"> <el-input-number v-model="form.price" :min="0" :precision="2" :step="0.01" style="width: 100%" placeholder="请è¾å ¥ä»·æ ¼" /> </el-form-item> <el-form-item label="ä½ç½®" prop="address"> <el-input v-model="form.address" type="textarea" :rows="3" placeholder="请è¾å ¥ä½ç½®" /> </el-form-item> </el-form> <template #footer> <div class="dialog-footer"> <el-button type="primary" @click="submitForm">确认</el-button> <el-button @click="closeDia">åæ¶</el-button> </div> </template> </el-dialog> </div> </template> <script setup> import pagination from "@/components/PIMTable/Pagination.vue"; import { ref, reactive, toRefs, onMounted, getCurrentInstance } from "vue"; import { ElMessageBox } from "element-plus"; import useUserStore from "@/store/modules/user"; import { listPage, add, update, delFixedAssets, } from "@/api/financialManagement/fixedAssets.js"; import dayjs from "dayjs"; const userStore = useUserStore(); const { proxy } = getCurrentInstance(); const tableData = ref([]); const selectedRows = ref([]); const tableLoading = ref(false); const loading = ref(false); const page = reactive({ current: 1, size: 100, }); const total = ref(0); const operationType = ref(""); const dialogFormVisible = ref(false); const data = reactive({ searchForm: { name: "", }, form: { id: null, name: "", model: "", price: 0, address: "", }, rules: { name: [{ required: true, message: "请è¾å ¥èµäº§åç§°", trigger: "blur" }], model: [{ required: true, message: "请è¾å ¥åå·", trigger: "blur" }], price: [{ required: true, message: "请è¾å ¥ä»·æ ¼", trigger: "blur" }], address: [{ required: true, message: "请è¾å ¥ä½ç½®", trigger: "blur" }], }, }); const { searchForm, form, rules } = toRefs(data); const handleQuery = () => { page.current = 1; getList(); }; const paginationChange = obj => { page.current = obj.page; page.size = obj.limit; getList(); }; const getList = () => { tableLoading.value = true; listPage({ ...searchForm.value, ...page }) .then(res => { tableLoading.value = false; tableData.value = res.data.records; total.value = res.data.total; }) .catch(() => { tableLoading.value = false; }); }; const handleSelectionChange = selection => { selectedRows.value = selection; }; const openForm = async (type, row) => { operationType.value = type; dialogFormVisible.value = true; if (type === "add") { form.value = { id: null, name: "", model: "", price: 0, address: "", }; } else { form.value = { id: row.id, name: row.name, model: row.model, price: row.price, address: row.address, }; } }; const submitForm = async () => { try { await proxy.$refs.formRef.validate(); loading.value = true; if (operationType.value === "add") { await add(form.value); proxy.$modal.msgSuccess("æ°å¢èµäº§æå"); } else { await update(form.value); proxy.$modal.msgSuccess("ä¿®æ¹èµäº§æå"); } closeDia(); getList(); } catch (error) { console.error("æäº¤å¤±è´¥:", error); if (!error.errors) { proxy.$modal.msgError("æä½å¤±è´¥ï¼è¯·éè¯"); } } finally { loading.value = false; } }; const closeDia = () => { proxy.$refs.formRef.resetFields(); dialogFormVisible.value = false; }; const handleDeleteSolo = row => { ElMessageBox.confirm("该èµäº§å°è¢«å é¤ï¼æ¯å¦ç¡®è®¤å é¤ï¼", "å é¤æç¤º", { confirmButtonText: "确认", cancelButtonText: "åæ¶", type: "warning", }) .then(() => { const ids = [row.id]; delFixedAssets(ids) .then(res => { proxy.$modal.msgSuccess("å 餿å"); getList(); }) .catch(() => { proxy.$modal.msgError("å é¤å¤±è´¥"); }); }) .catch(() => { proxy.$modal.msg("已忶"); }); }; const handleDelete = () => { if (selectedRows.value.length === 0) { proxy.$modal.msgWarning("è¯·éæ©è¦å é¤çæ°æ®"); return; } ElMessageBox.confirm("éä¸çå 容å°è¢«å é¤ï¼æ¯å¦ç¡®è®¤å é¤ï¼", "å é¤æç¤º", { confirmButtonText: "确认", cancelButtonText: "åæ¶", type: "warning", }) .then(() => { const ids = selectedRows.value.map(item => item.id); delFixedAssets(ids) .then(res => { proxy.$modal.msgSuccess("å 餿å"); getList(); }) .catch(() => { proxy.$modal.msgError("å é¤å¤±è´¥"); }); }) .catch(() => { proxy.$modal.msg("已忶"); }); }; onMounted(() => { getList(); }); </script> <style scoped lang="scss"></style> src/views/procurementManagement/advancedPriceManagement/index.vue
@@ -8,7 +8,7 @@ </el-form-item> <el-form-item label="ä¾åºåï¼"> <el-select v-model="searchForm.supplierId" placeholder="è¯·éæ©ä¾åºå" clearable style="width: 200px"> <el-option v-for="supplier in supplierList" :key="supplier.id" :label="supplier.name" :value="supplier.id" /> <el-option v-for="supplier in supplierList" :key="supplier.id" :label="supplier.supplierName" :value="supplier.id" /> </el-select> </el-form-item> <el-form-item> @@ -454,15 +454,6 @@ }); const supplierList = ref([ { id: 1, name: 'ä¼è´¨äºéä¾åºå' }, { id: 2, name: 'é¢æè´¸æå ¬å¸' }, { id: 3, name: 'å»ºææ¹åå' } ]) const productList = ref([ { id: 1, name: 'é«å¼ºåº¦èºæ ' }, { id: 2, name: 'ä¸éé¢ç®¡' }, { id: 3, name: 'éåéåæ' } ]) src/views/procurementManagement/procurementLedger/index.vue
@@ -552,6 +552,11 @@ </el-select> </el-form-item> </el-col> <el-col :span="24"> <el-form-item label=" "> <el-button type="warning" :disabled="!(productForm.productId && productForm.productModelId && productForm.taxRate)" @click="showPriceReference" icon="Search">æ¥çåå²éè´ä»·æ ¼åè</el-button> </el-form-item> </el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"> @@ -636,6 +641,62 @@ <el-button type="primary" @click="submitProduct">确认</el-button> <el-button @click="closeProductDia">åæ¶</el-button> </div> </template> </el-dialog> <!-- åå²éè´ä»·æ ¼åèå¼¹çª --> <el-dialog v-model="priceReferenceVisible" title="åå²éè´ä»·æ ¼åè" width="1000px" append-to-body > <el-table v-loading="priceReferenceLoading" :data="priceReferenceData" border style="width: 100%" > <el-table-column label="åååç§°" prop="productName" min-width="150" show-overflow-tooltip /> <el-table-column label="è§æ ¼åå·" prop="specification" width="150" show-overflow-tooltip /> <el-table-column label="ä¾åºå" prop="supplierName" width="200" show-overflow-tooltip /> <el-table-column label="åºç¡ä»·æ ¼" width="120" align="right"> <template #default="{ row }"> <span style="color: #f56c6c; font-weight: bold;">Â¥{{ row.basePrice }}</span> </template> </el-table-column> <el-table-column label="ææ£ä¿¡æ¯" width="120" align="center"> <template #default="{ row }"> <el-tag v-if="row.discountType === 'percentage'" type="success"> {{ row.discountValue }}% </el-tag> <el-tag v-else-if="row.discountType === 'fixed'" type="warning"> -Â¥{{ row.discountValue }} </el-tag> <span v-else>æ ææ£</span> </template> </el-table-column> <el-table-column label="çææ¶é´" prop="effectiveTime" width="180" align="center" /> <el-table-column label="æä½" width="100" align="center" fixed="right"> <template #default="{ row }"> <el-button type="primary" link @click="selectPriceReference(row)">éæ©</el-button> </template> </el-table-column> </el-table> <div class="pagination-container" style="margin-top: 20px; display: flex; justify-content: flex-end;"> <el-pagination v-model:current-page="priceReferencePagination.current" v-model:page-size="priceReferencePagination.size" :page-sizes="[10, 20, 50]" :total="priceReferenceTotal" layout="total, sizes, prev, pager, next" @size-change="handlePriceReferenceSizeChange" @current-change="handlePriceReferenceCurrentChange" /> </div> <template #footer> <el-button @click="priceReferenceVisible = false">å ³é</el-button> </template> </el-dialog> @@ -903,6 +964,7 @@ let nextApproverId = 2; import useUserStore from "@/store/modules/user"; import { modelList, productTreeList } from "@/api/basicData/product.js"; import { listPage as listAdvancedPrice } from "@/api/procurementManagement/advancedPriceManagement.js"; import dayjs from "dayjs"; const userStore = useUserStore(); @@ -996,6 +1058,72 @@ }, }); const { productForm, productRules } = toRefs(productFormData); // éè´ä»·æ ¼ç®¡çåèå¼¹çª const priceReferenceVisible = ref(false); const priceReferenceLoading = ref(false); const priceReferenceData = ref([]); const priceReferenceTotal = ref(0); const priceReferencePagination = reactive({ current: 1, size: 10 }); const showPriceReference = () => { priceReferenceVisible.value = true; handlePriceReferenceSearch(); }; const handlePriceReferenceSearch = () => { priceReferenceLoading.value = true; // 模ææç´¢åæ°ï¼productId æ å°ä¸º productName æ IDï¼è¿éæ ¹æ® advancedPriceManagement ç API ç¡®å®åæ° // å设é«çº§ä»·æ ¼ç®¡çç listPage æ¥æ¶ productId const query = { productId: productForm.value.productId, specificationId: productForm.value.productModelId, current: priceReferencePagination.current, size: priceReferencePagination.size }; listAdvancedPrice(query).then(res => { priceReferenceData.value = res.data.records; priceReferenceTotal.value = res.data.total; priceReferenceLoading.value = false; }).catch(() => { priceReferenceLoading.value = false; }); }; const handlePriceReferenceSizeChange = (size) => { priceReferencePagination.size = size; handlePriceReferenceSearch(); }; const handlePriceReferenceCurrentChange = (page) => { priceReferencePagination.current = page; handlePriceReferenceSearch(); }; const selectPriceReference = (row) => { // 计ç®å®é ä»·æ ¼ï¼åºç¡ä»·æ ¼ - ææ£ let actualPrice = row.basePrice; if (row.discountType === 'percentage') { actualPrice = row.basePrice * (1 - row.discountValue / 100); } else if (row.discountType === 'fixed') { actualPrice = row.basePrice - row.discountValue; } // å¡«å å«ç¨åä»·ï¼ä¿ç两ä½å°æ° productForm.value.taxInclusiveUnitPrice = Number(Math.max(actualPrice, 0)).toFixed(2); // 妿已ç»è¾å ¥äºæ°éï¼åèªå¨è®¡ç®æ»ä»· if (productForm.value.quantity) { mathNum(); } priceReferenceVisible.value = false; proxy.$modal.msgSuccess("å·²å¼ç¨åå²ä»·æ ¼"); }; const upload = reactive({ // ä¸ä¼ çå°å url: import.meta.env.VITE_APP_BASE_API + "/file/upload", src/views/salesManagement/salesLedger/index.vue
@@ -1669,7 +1669,7 @@ }; deliveryFormVisible.value = true; }).catch(err => { ElMessage.error(err.msg); // ElMessage.error(err); }); };