src/views/inventoryManagement/dispatchLog/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/inventoryManagement/issueManagement/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/inventoryManagement/receiptManagement/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/inventoryManagement/stockManagement/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/views/inventoryManagement/dispatchLog/index.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,356 @@ <template> <div class="app-container"> <div class="search_form"> <div> <span class="search_title">ä¾åºååç§°ï¼</span> <el-input v-model="searchForm.customerName" 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 @click="handleOut">导åº</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" :expand-row-keys="expandedRowKeys" :row-key="row => row.id" show-summary style="width: 100%" :summary-method="summarizeMainTable" 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="salesContractNo" width="100" show-overflow-tooltip /> <el-table-column label="ä¾åºååç§°" prop="customerName" width="160" show-overflow-tooltip /> <el-table-column label="产å大类" prop="salesman" width="100" show-overflow-tooltip /> <el-table-column label="è§æ ¼åå·" prop="projectName" width="100" show-overflow-tooltip /> <el-table-column label="åä½" prop="contractAmount" width="80" show-overflow-tooltip /> <el-table-column label="åºåºæ°é" prop="entryPersonName" width="100" show-overflow-tooltip /> <el-table-column label="å«ç¨åä»·" prop="entryDate" width="100" show-overflow-tooltip /> <el-table-column label="å«ç¨æ»ä»·" prop="executionDate" width="100" show-overflow-tooltip /> <el-table-column label="ç¨ç" prop="executionDate" width="100" show-overflow-tooltip /> <el-table-column label="ä¸å«ç¨æ»ä»·" prop="executionDate" width="100" show-overflow-tooltip /> <el-table-column label="åºåºäºº" prop="executionDate" width="80" show-overflow-tooltip /> <el-table-column fixed="right" label="æä½" min-width="60" align="center"> <template #default="scope"> <el-button link type="primary" size="small" @click="openForm('edit', 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="70%" @close="closeDia"> <el-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef"> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="ä¾åºååç§°ï¼" prop="salesContractNo"> <el-input v-model="form.salesContractNo" placeholder="请è¾å ¥" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="产å大类ï¼" prop="salesman"> <el-select v-model="form.salesman" placeholder="è¯·éæ©" clearable> <el-option v-for="item in userList" :key="item.nickName" :label="item.nickName" :value="item.nickName" /> </el-select> </el-form-item> </el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="è§æ ¼åå·ï¼" prop="customerContractNo"> <el-input v-model="form.customerContractNo" placeholder="请è¾å ¥" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="åä½ï¼" prop="customerId"> <el-input v-model="form.customerContractNo" placeholder="请è¾å ¥" clearable /> </el-form-item> </el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="åºåºæ¶é´ï¼" prop="projectName"> <el-date-picker style="width: 100%" v-model="form.entryDate" value-format="YYYY-MM-DD" format="YYYY-MM-DD" type="date" placeholder="è¯·éæ©" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="åºåºæ°éï¼" prop="customerContractNo"> <el-input v-model="form.customerContractNo" placeholder="请è¾å ¥" clearable /> </el-form-item> </el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="å«ç¨åä»·ï¼" prop="customerId"> <el-input v-model="form.customerContractNo" placeholder="请è¾å ¥" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="å«ç¨æ»ä»·ï¼" prop="customerContractNo"> <el-input v-model="form.customerContractNo" placeholder="请è¾å ¥" clearable /> </el-form-item> </el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="ç¨çï¼" prop="customerId"> <el-input v-model="form.customerContractNo" placeholder="请è¾å ¥" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="ä¸å«ç¨æ»ä»·ï¼" prop="entryDate"> <el-input v-model="form.customerContractNo" placeholder="请è¾å ¥" clearable /> </el-form-item> </el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="åºåºäººï¼" prop="entryPerson"> <el-select v-model="form.entryPerson" placeholder="è¯·éæ©" clearable> <el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId" /> </el-select> </el-form-item> </el-col> </el-row> </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 } from 'vue' import { ElMessageBox } from "element-plus"; import useUserStore from '@/store/modules/user' import { userListNoPage } from "@/api/system/user.js"; import { ledgerListPage, customerList, addOrUpdateSalesLedger, getSalesLedgerWithProducts, delLedger } from "@/api/salesManagement/salesLedger.js"; const userStore = useUserStore() const { proxy } = getCurrentInstance() const tableData = ref([]) const productData = ref([]) const selectedRows = ref([]) const userList = ref([]) const customerOption = ref([]) const tableLoading = ref(false) const page = reactive({ current: 1, size: 100, }) const total = ref(0) const fileList = ref([]) // ç¨æ·ä¿¡æ¯è¡¨åå¼¹æ¡æ°æ® const operationType = ref('') const dialogFormVisible = ref(false) const data = reactive({ searchForm: { customerName: '', }, form: { salesContractNo: '', salesman: '', customerContractNo: '', customerId: '', projectName: '', entryPerson: '', entryDate: '', maintenanceTime: '', productData: [], executionDate: '' }, rules: { salesman: [{ required: true, message: "è¯·éæ©", trigger: "change" }], customerContractNo: [{ required: true, message: "请è¾å ¥", trigger: "blur" }], customerId: [{ required: true, message: "è¯·éæ©", trigger: "change" }], projectName: [{ required: true, message: "请è¾å ¥", trigger: "blur" }], entryPerson: [{ required: true, message: "è¯·éæ©", trigger: "change" }], entryDate: [{ required: true, message: "è¯·éæ©", trigger: "change" }], executionDate: [{ required: true, message: "è¯·éæ©", trigger: "change" }], } }) 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 ledgerListPage({ ...searchForm.value, ...page }).then(res => { tableLoading.value = false tableData.value = res.records tableData.value.map(item => { item.children = [] }) total.value = res.total }).catch(() => { tableLoading.value = false }) } const findNodeById = (nodes, productId) => { for (let i = 0; i < nodes.length; i++) { if (nodes[i].value === productId) { return nodes[i].label; // æ¾å°èç¹ï¼è¿å该èç¹ } if (nodes[i].children && nodes[i].children.length > 0) { const foundNode = findNodeById(nodes[i].children, productId); if (foundNode) { return foundNode.label; // å¨åèç¹ä¸æ¾å°ï¼è¿å该èç¹ } } } return null; // æ²¡ææ¾å°èç¹ï¼è¿ånull }; // è¡¨æ ¼éæ©æ°æ® const handleSelectionChange = (selection) => { // è¿æ»¤æåæ°æ® selectedRows.value = selection.filter(item => item.children !== undefined); console.log('selection', selectedRows.value) } const expandedRowKeys = ref([]) // 主表åè®¡æ¹æ³ const summarizeMainTable = (param) => { return proxy.summarizeTable(param, ['contractAmount', 'taxInclusiveTotalPrice', 'taxExclusiveTotalPrice']); }; // æå¼å¼¹æ¡ const openForm = async (type, row) => { operationType.value = type form.value = {} productData.value = [] let userLists = await userListNoPage() userList.value = userLists.data customerList().then(res => { customerOption.value = res }) console.log('userStore.id', userStore.id) form.value.entryPerson = userStore.id if (type === 'edit') { currentId.value = row.id; getSalesLedgerWithProducts({ id: row.id, type: 1 }).then(res => { form.value = { ...res } form.value.entryPerson = Number(res.entryPerson) productData.value = form.value.productData fileList.value = form.value.salesLedgerFiles }) } // let userAll = await userStore.getInfo() // userList.value.forEach(element => { // if(userAll.user.nickName === element.nickName && userAll.user.userName === element.userName) { // form.value.entryPerson = userAll.user.userId // 设置é»è®¤ä¸å¡å为å½åç¨æ· // } // }); form.value.entryDate = getCurrentDate() // 设置é»è®¤å½å ¥æ¥æä¸ºå½åæ¥æ dialogFormVisible.value = true } // æäº¤è¡¨å const submitForm = () => { proxy.$refs["formRef"].validate(valid => { if (valid) { if (productData.value.length > 0) { form.value.productData = proxy.HaveJson(productData.value) } else { proxy.$modal.msgWarning('请添å 产åä¿¡æ¯') return } let tempFileIds = [] if (fileList.value.length > 0) { tempFileIds = fileList.value.map(item => item.tempId) } form.value.tempFileIds = tempFileIds form.value.type = 1 addOrUpdateSalesLedger(form.value).then(res => { proxy.$modal.msgSuccess("æäº¤æå") closeDia() getList() }) } }) } // å ³éå¼¹æ¡ const closeDia = () => { proxy.resetForm("formRef") dialogFormVisible.value = false } // å¯¼åº const handleOut = () => { ElMessageBox.confirm( 'éä¸çå 容å°è¢«å¯¼åºï¼æ¯å¦ç¡®è®¤å¯¼åºï¼', '导åº', { confirmButtonText: '确认', cancelButtonText: 'åæ¶', type: 'warning', } ).then(() => { proxy.download("/sales/ledger/export", {}, 'åºåºå°è´¦.xlsx') }).catch(() => { proxy.$modal.msg("已忶") }) } // å é¤ const handleDelete = () => { let ids = [] if (selectedRows.value.length > 0) { ids = selectedRows.value.map(item => item.id); } else { proxy.$modal.msgWarning('è¯·éæ©æ°æ®') return } ElMessageBox.confirm( 'éä¸çå 容å°è¢«å é¤ï¼æ¯å¦ç¡®è®¤å é¤ï¼', '导åº', { confirmButtonText: '确认', cancelButtonText: 'åæ¶', type: 'warning', } ).then(() => { delLedger(ids).then(res => { proxy.$modal.msgSuccess("å 餿å") getList() }) }).catch(() => { proxy.$modal.msg("已忶") }) } // è·åå½åæ¥æå¹¶æ ¼å¼å为 YYYY-MM-DD function getCurrentDate() { const today = new Date(); const year = today.getFullYear(); const month = String(today.getMonth() + 1).padStart(2, '0'); // æä»½ä»0å¼å§ const day = String(today.getDate()).padStart(2, '0'); return `${year}-${month}-${day}`; } onMounted(() => { getList() }) </script> <style scoped lang="scss"></style> src/views/inventoryManagement/issueManagement/index.vue
@@ -8,7 +8,7 @@ <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="primary" @click="openForm('add')">æ°å¢åºåº</el-button> --> <el-button @click="handleOut">导åº</el-button> <el-button type="danger" plain @click="handleDelete">å é¤</el-button> </div> @@ -19,108 +19,41 @@ :summary-method="summarizeMainTable" 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="salesContractNo" width="180" show-overflow-tooltip /> <el-table-column label="åºåºæ¹æ¬¡" prop="customerContractNo" width="180" show-overflow-tooltip /> <el-table-column label="ä¾åºååç§°" prop="customerName" width="300" show-overflow-tooltip /> <el-table-column label="å ¥åºæ¶é´" prop="salesContractNo" width="100" show-overflow-tooltip /> <el-table-column label="å ¥åºæ¹æ¬¡" prop="customerContractNo" width="160" show-overflow-tooltip /> <el-table-column label="ä¾åºååç§°" prop="customerName" width="160" show-overflow-tooltip /> <el-table-column label="产å大类" prop="salesman" width="100" show-overflow-tooltip /> <el-table-column label="è§æ ¼åå·" prop="projectName" width="180" show-overflow-tooltip /> <el-table-column label="åä½" prop="contractAmount" width="180" show-overflow-tooltip /> <el-table-column label="åºåºæ°é" prop="entryPersonName" width="100" show-overflow-tooltip /> <el-table-column label="å«ç¨åä»·" prop="entryDate" width="120" show-overflow-tooltip /> <el-table-column label="å«ç¨æ»ä»·" prop="executionDate" width="120" show-overflow-tooltip /> <el-table-column label="ç¨ç" prop="executionDate" width="120" show-overflow-tooltip /> <el-table-column label="ä¸å«ç¨æ»ä»·" prop="executionDate" width="120" show-overflow-tooltip /> <el-table-column label="åºåºäºº" prop="executionDate" width="120" show-overflow-tooltip /> <el-table-column label="è§æ ¼åå·" prop="projectName" width="160" show-overflow-tooltip /> <el-table-column label="åä½" prop="contractAmount" width="70" show-overflow-tooltip /> <el-table-column label="å ¥åºæ°é" prop="entryPersonName" width="90" show-overflow-tooltip /> <el-table-column label="å«ç¨åä»·" prop="entryDate" width="100" show-overflow-tooltip /> <el-table-column label="å«ç¨æ»ä»·" prop="executionDate" width="100" show-overflow-tooltip /> <el-table-column label="ç¨ç" prop="executionDate" width="80" show-overflow-tooltip /> <el-table-column label="ä¸å«ç¨æ»ä»·" prop="executionDate" width="100" show-overflow-tooltip /> <el-table-column label="å ¥åºäºº" prop="executionDate" width="80" show-overflow-tooltip /> <el-table-column fixed="right" label="æä½" min-width="60" align="center"> <template #default="scope"> <el-button link type="primary" size="small" @click="openForm('edit', scope.row);">ç¼è¾</el-button> <el-button link type="primary" size="small" @click="openForm(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="70%" @close="closeDia"> <el-dialog v-model="dialogFormVisible" :title="'æ°å¢åºåº'" width="70%" @close="closeDia"> <el-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef"> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="ä¾åºååç§°ï¼" prop="salesContractNo"> <el-form-item label="åºåºæ°éï¼" prop="salesContractNo"> <el-input v-model="form.salesContractNo" placeholder="请è¾å ¥" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="产å大类ï¼" prop="salesman"> <el-select v-model="form.salesman" placeholder="è¯·éæ©" clearable> <el-option v-for="item in userList" :key="item.nickName" :label="item.nickName" :value="item.nickName" /> </el-select> </el-form-item> </el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="è§æ ¼åå·ï¼" prop="customerContractNo"> <el-input v-model="form.customerContractNo" placeholder="请è¾å ¥" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="åä½ï¼" prop="customerId"> <el-input v-model="form.customerContractNo" placeholder="请è¾å ¥" clearable /> </el-form-item> </el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="å ¥åºæ¶é´ï¼" prop="projectName"> <el-form-item label="åºåºæ¥æï¼" prop="projectName"> <el-date-picker style="width: 100%" v-model="form.entryDate" value-format="YYYY-MM-DD" format="YYYY-MM-DD" type="date" placeholder="è¯·éæ©" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="å ¥åºæ¹æ¬¡ï¼" prop="entryPerson"> <el-input v-model="form.customerContractNo" placeholder="请è¾å ¥" clearable /> </el-form-item> </el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="å ¥åºæ°éï¼" prop="customerContractNo"> <el-input v-model="form.customerContractNo" placeholder="请è¾å ¥" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="å«ç¨åä»·ï¼" prop="customerId"> <el-input v-model="form.customerContractNo" placeholder="请è¾å ¥" clearable /> </el-form-item> </el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="å«ç¨æ»ä»·ï¼" prop="customerContractNo"> <el-input v-model="form.customerContractNo" placeholder="请è¾å ¥" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="ç¨çï¼" prop="customerId"> <el-input v-model="form.customerContractNo" placeholder="请è¾å ¥" clearable /> </el-form-item> </el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="ä¸å«ç¨æ»ä»·ï¼" prop="entryDate"> <el-input v-model="form.customerContractNo" placeholder="请è¾å ¥" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="å ¥åºäººï¼" prop="entryPerson"> <el-form-item label="åºåºäººï¼" prop="entryPerson"> <el-select v-model="form.entryPerson" placeholder="è¯·éæ©" clearable> <el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId" /> </el-select> </el-form-item> </el-col> </el-row> </el-form> <template #footer> <div class="dialog-footer"> @@ -243,7 +176,7 @@ }; // æå¼å¼¹æ¡ const openForm = async (type, row) => { const openForm = async (row) => { operationType.value = type form.value = {} productData.value = [] src/views/inventoryManagement/receiptManagement/index.vue
@@ -8,7 +8,7 @@ <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="primary" @click="openForm('add')">æ°å¢å ¥åº</el-button> <el-button @click="handleOut">导åº</el-button> <el-button type="danger" plain @click="handleDelete">å é¤</el-button> </div> @@ -19,18 +19,18 @@ :summary-method="summarizeMainTable" 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="salesContractNo" width="180" show-overflow-tooltip /> <el-table-column label="å ¥åºæ¹æ¬¡" prop="customerContractNo" width="180" show-overflow-tooltip /> <el-table-column label="ä¾åºååç§°" prop="customerName" width="300" show-overflow-tooltip /> <el-table-column label="å ¥åºæ¶é´" prop="salesContractNo" width="100" show-overflow-tooltip /> <el-table-column label="å ¥åºæ¹æ¬¡" prop="customerContractNo" width="160" show-overflow-tooltip /> <el-table-column label="ä¾åºååç§°" prop="customerName" width="160" show-overflow-tooltip /> <el-table-column label="产å大类" prop="salesman" width="100" show-overflow-tooltip /> <el-table-column label="è§æ ¼åå·" prop="projectName" width="180" show-overflow-tooltip /> <el-table-column label="åä½" prop="contractAmount" width="180" show-overflow-tooltip /> <el-table-column label="å ¥åºæ°é" prop="entryPersonName" width="100" show-overflow-tooltip /> <el-table-column label="å«ç¨åä»·" prop="entryDate" width="120" show-overflow-tooltip /> <el-table-column label="å«ç¨æ»ä»·" prop="executionDate" width="120" show-overflow-tooltip /> <el-table-column label="ç¨ç" prop="executionDate" width="120" show-overflow-tooltip /> <el-table-column label="ä¸å«ç¨æ»ä»·" prop="executionDate" width="120" show-overflow-tooltip /> <el-table-column label="å ¥åºäºº" prop="executionDate" width="120" show-overflow-tooltip /> <el-table-column label="è§æ ¼åå·" prop="projectName" width="160" show-overflow-tooltip /> <el-table-column label="åä½" prop="contractAmount" width="70" show-overflow-tooltip /> <el-table-column label="å ¥åºæ°é" prop="entryPersonName" width="90" show-overflow-tooltip /> <el-table-column label="å«ç¨åä»·" prop="entryDate" width="100" show-overflow-tooltip /> <el-table-column label="å«ç¨æ»ä»·" prop="executionDate" width="100" show-overflow-tooltip /> <el-table-column label="ç¨ç" prop="executionDate" width="80" show-overflow-tooltip /> <el-table-column label="ä¸å«ç¨æ»ä»·" prop="executionDate" width="100" show-overflow-tooltip /> <el-table-column label="å ¥åºäºº" prop="executionDate" width="80" show-overflow-tooltip /> <el-table-column fixed="right" label="æä½" min-width="60" align="center"> <template #default="scope"> <el-button link type="primary" size="small" @click="openForm('edit', scope.row);">ç¼è¾</el-button> src/views/inventoryManagement/stockManagement/index.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,357 @@ <template> <div class="app-container"> <div class="search_form"> <div> <span class="search_title">ä¾åºååç§°ï¼</span> <el-input v-model="searchForm.customerName" 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 @click="handleOut">导åº</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" :expand-row-keys="expandedRowKeys" :row-key="row => row.id" show-summary style="width: 100%" :summary-method="summarizeMainTable" 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="salesContractNo" width="100" show-overflow-tooltip /> <el-table-column label="å ¥åºæ¥æ" prop="salesContractNo" width="100" show-overflow-tooltip /> <el-table-column label="ä¾åºååç§°" prop="customerName" width="160" show-overflow-tooltip /> <el-table-column label="产å大类" prop="salesman" width="100" show-overflow-tooltip /> <el-table-column label="è§æ ¼åå·" prop="projectName" width="100" show-overflow-tooltip /> <el-table-column label="åä½" prop="contractAmount" width="80" show-overflow-tooltip /> <el-table-column label="åºåºæ°é" prop="entryPersonName" width="100" show-overflow-tooltip /> <el-table-column label="å«ç¨åä»·" prop="entryDate" width="100" show-overflow-tooltip /> <el-table-column label="å«ç¨æ»ä»·" prop="executionDate" width="100" show-overflow-tooltip /> <el-table-column label="ç¨ç" prop="executionDate" width="100" show-overflow-tooltip /> <el-table-column label="ä¸å«ç¨æ»ä»·" prop="executionDate" width="100" show-overflow-tooltip /> <el-table-column label="å ¥åºäºº" prop="executionDate" width="80" show-overflow-tooltip /> <el-table-column fixed="right" label="æä½" min-width="60" align="center"> <template #default="scope"> <el-button link type="primary" size="small" @click="openForm('edit', 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="70%" @close="closeDia"> <el-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef"> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="ä¾åºååç§°ï¼" prop="salesContractNo"> <el-input v-model="form.salesContractNo" placeholder="请è¾å ¥" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="产å大类ï¼" prop="salesman"> <el-select v-model="form.salesman" placeholder="è¯·éæ©" clearable> <el-option v-for="item in userList" :key="item.nickName" :label="item.nickName" :value="item.nickName" /> </el-select> </el-form-item> </el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="è§æ ¼åå·ï¼" prop="customerContractNo"> <el-input v-model="form.customerContractNo" placeholder="请è¾å ¥" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="åä½ï¼" prop="customerId"> <el-input v-model="form.customerContractNo" placeholder="请è¾å ¥" clearable /> </el-form-item> </el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="åºåºæ¶é´ï¼" prop="projectName"> <el-date-picker style="width: 100%" v-model="form.entryDate" value-format="YYYY-MM-DD" format="YYYY-MM-DD" type="date" placeholder="è¯·éæ©" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="åºåºæ°éï¼" prop="customerContractNo"> <el-input v-model="form.customerContractNo" placeholder="请è¾å ¥" clearable /> </el-form-item> </el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="å«ç¨åä»·ï¼" prop="customerId"> <el-input v-model="form.customerContractNo" placeholder="请è¾å ¥" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="å«ç¨æ»ä»·ï¼" prop="customerContractNo"> <el-input v-model="form.customerContractNo" placeholder="请è¾å ¥" clearable /> </el-form-item> </el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="ç¨çï¼" prop="customerId"> <el-input v-model="form.customerContractNo" placeholder="请è¾å ¥" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="ä¸å«ç¨æ»ä»·ï¼" prop="entryDate"> <el-input v-model="form.customerContractNo" placeholder="请è¾å ¥" clearable /> </el-form-item> </el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="åºåºäººï¼" prop="entryPerson"> <el-select v-model="form.entryPerson" placeholder="è¯·éæ©" clearable> <el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId" /> </el-select> </el-form-item> </el-col> </el-row> </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 } from 'vue' import { ElMessageBox } from "element-plus"; import useUserStore from '@/store/modules/user' import { userListNoPage } from "@/api/system/user.js"; import { ledgerListPage, customerList, addOrUpdateSalesLedger, getSalesLedgerWithProducts, delLedger } from "@/api/salesManagement/salesLedger.js"; const userStore = useUserStore() const { proxy } = getCurrentInstance() const tableData = ref([]) const productData = ref([]) const selectedRows = ref([]) const userList = ref([]) const customerOption = ref([]) const tableLoading = ref(false) const page = reactive({ current: 1, size: 100, }) const total = ref(0) const fileList = ref([]) // ç¨æ·ä¿¡æ¯è¡¨åå¼¹æ¡æ°æ® const operationType = ref('') const dialogFormVisible = ref(false) const data = reactive({ searchForm: { customerName: '', }, form: { salesContractNo: '', salesman: '', customerContractNo: '', customerId: '', projectName: '', entryPerson: '', entryDate: '', maintenanceTime: '', productData: [], executionDate: '' }, rules: { salesman: [{ required: true, message: "è¯·éæ©", trigger: "change" }], customerContractNo: [{ required: true, message: "请è¾å ¥", trigger: "blur" }], customerId: [{ required: true, message: "è¯·éæ©", trigger: "change" }], projectName: [{ required: true, message: "请è¾å ¥", trigger: "blur" }], entryPerson: [{ required: true, message: "è¯·éæ©", trigger: "change" }], entryDate: [{ required: true, message: "è¯·éæ©", trigger: "change" }], executionDate: [{ required: true, message: "è¯·éæ©", trigger: "change" }], } }) 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 ledgerListPage({ ...searchForm.value, ...page }).then(res => { tableLoading.value = false tableData.value = res.records tableData.value.map(item => { item.children = [] }) total.value = res.total }).catch(() => { tableLoading.value = false }) } const findNodeById = (nodes, productId) => { for (let i = 0; i < nodes.length; i++) { if (nodes[i].value === productId) { return nodes[i].label; // æ¾å°èç¹ï¼è¿å该èç¹ } if (nodes[i].children && nodes[i].children.length > 0) { const foundNode = findNodeById(nodes[i].children, productId); if (foundNode) { return foundNode.label; // å¨åèç¹ä¸æ¾å°ï¼è¿å该èç¹ } } } return null; // æ²¡ææ¾å°èç¹ï¼è¿ånull }; // è¡¨æ ¼éæ©æ°æ® const handleSelectionChange = (selection) => { // è¿æ»¤æåæ°æ® selectedRows.value = selection.filter(item => item.children !== undefined); console.log('selection', selectedRows.value) } const expandedRowKeys = ref([]) // 主表åè®¡æ¹æ³ const summarizeMainTable = (param) => { return proxy.summarizeTable(param, ['contractAmount', 'taxInclusiveTotalPrice', 'taxExclusiveTotalPrice']); }; // æå¼å¼¹æ¡ const openForm = async (type, row) => { operationType.value = type form.value = {} productData.value = [] let userLists = await userListNoPage() userList.value = userLists.data customerList().then(res => { customerOption.value = res }) console.log('userStore.id', userStore.id) form.value.entryPerson = userStore.id if (type === 'edit') { currentId.value = row.id; getSalesLedgerWithProducts({ id: row.id, type: 1 }).then(res => { form.value = { ...res } form.value.entryPerson = Number(res.entryPerson) productData.value = form.value.productData fileList.value = form.value.salesLedgerFiles }) } // let userAll = await userStore.getInfo() // userList.value.forEach(element => { // if(userAll.user.nickName === element.nickName && userAll.user.userName === element.userName) { // form.value.entryPerson = userAll.user.userId // 设置é»è®¤ä¸å¡å为å½åç¨æ· // } // }); form.value.entryDate = getCurrentDate() // 设置é»è®¤å½å ¥æ¥æä¸ºå½åæ¥æ dialogFormVisible.value = true } // æäº¤è¡¨å const submitForm = () => { proxy.$refs["formRef"].validate(valid => { if (valid) { if (productData.value.length > 0) { form.value.productData = proxy.HaveJson(productData.value) } else { proxy.$modal.msgWarning('请添å 产åä¿¡æ¯') return } let tempFileIds = [] if (fileList.value.length > 0) { tempFileIds = fileList.value.map(item => item.tempId) } form.value.tempFileIds = tempFileIds form.value.type = 1 addOrUpdateSalesLedger(form.value).then(res => { proxy.$modal.msgSuccess("æäº¤æå") closeDia() getList() }) } }) } // å ³éå¼¹æ¡ const closeDia = () => { proxy.resetForm("formRef") dialogFormVisible.value = false } // å¯¼åº const handleOut = () => { ElMessageBox.confirm( 'éä¸çå 容å°è¢«å¯¼åºï¼æ¯å¦ç¡®è®¤å¯¼åºï¼', '导åº', { confirmButtonText: '确认', cancelButtonText: 'åæ¶', type: 'warning', } ).then(() => { proxy.download("/sales/ledger/export", {}, 'åºåºå°è´¦.xlsx') }).catch(() => { proxy.$modal.msg("已忶") }) } // å é¤ const handleDelete = () => { let ids = [] if (selectedRows.value.length > 0) { ids = selectedRows.value.map(item => item.id); } else { proxy.$modal.msgWarning('è¯·éæ©æ°æ®') return } ElMessageBox.confirm( 'éä¸çå 容å°è¢«å é¤ï¼æ¯å¦ç¡®è®¤å é¤ï¼', '导åº', { confirmButtonText: '确认', cancelButtonText: 'åæ¶', type: 'warning', } ).then(() => { delLedger(ids).then(res => { proxy.$modal.msgSuccess("å 餿å") getList() }) }).catch(() => { proxy.$modal.msg("已忶") }) } // è·åå½åæ¥æå¹¶æ ¼å¼å为 YYYY-MM-DD function getCurrentDate() { const today = new Date(); const year = today.getFullYear(); const month = String(today.getMonth() + 1).padStart(2, '0'); // æä»½ä»0å¼å§ const day = String(today.getDate()).padStart(2, '0'); return `${year}-${month}-${day}`; } onMounted(() => { getList() }) </script> <style scoped lang="scss"></style>