src/views/basicData/product/index.vue
@@ -280,7 +280,7 @@ } ], unit: [{ required: true, message: "请è¾å ¥", trigger: "blur" }], speculativeTradingName: [{ required: true, message: "è¯·éæ©ç»å®æºå¨", trigger: "change" }], speculativeTradingName: [{ required: false, message: "è¯·éæ©ç»å®æºå¨", trigger: "change" }], }, }); const { form, rules, modelForm, modelRules } = toRefs(data); src/views/inventoryManagement/dispatchLog/index.vue
@@ -1,7 +1,7 @@ <template> <div class="app-container"> <el-tabs v-model="activeTab" @tab-change="handleTabChange"> <el-tab-pane label="ç产åºåº" name="production"> <el-tab-pane label="æååºåº" name="production"> <div class="search_form"> <div> <!-- <span class="search_title">客æ·åç§°ï¼</span>--> @@ -69,9 +69,9 @@ </div> </el-tab-pane> <!-- <el-tab-pane label="éè´åºåº" name="purchase">--> <!-- <div class="search_form">--> <!-- <div>--> <el-tab-pane label="åæåºåº" name="purchase"> <div class="search_form"> <div> <!--<!– <span class="search_title">ä¾åºååç§°ï¼</span>–>--> <!--<!– <el-input–>--> <!--<!– v-model="searchForm.supplierName"–>--> @@ -81,63 +81,63 @@ <!--<!– clearable–>--> <!--<!– prefix-icon="Search"–>--> <!--<!– />–>--> <!-- <span class="search_title ml10">åºåºæ¥æï¼</span>--> <!-- <el-date-picker--> <!-- v-model="searchForm.timeStr"--> <!-- type="date"--> <!-- placeholder="è¯·éæ©æ¥æ"--> <!-- value-format="YYYY-MM-DD"--> <!-- format="YYYY-MM-DD"--> <!-- clearable--> <!-- @change="handleQuery"--> <!-- />--> <!-- <el-button type="primary" @click="handleQuery" style="margin-left: 10px">æç´¢</el-button>--> <!-- </div>--> <!-- <div>--> <!-- <el-button @click="handleOut">导åº</el-button>--> <!-- <el-button type="danger" plain @click="handleDelete">å é¤</el-button>--> <!-- <el-button type="primary" plain @click="handlePrint">æå°</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="createTime" min-width="120" show-overflow-tooltip />--> <span class="search_title ml10">åºåºæ¥æï¼</span> <el-date-picker v-model="searchForm.timeStr" type="date" placeholder="è¯·éæ©æ¥æ" value-format="YYYY-MM-DD" format="YYYY-MM-DD" clearable @change="handleQuery" /> <el-button type="primary" @click="handleQuery" style="margin-left: 10px">æç´¢</el-button> </div> <div> <el-button @click="handleOut">导åº</el-button> <el-button type="danger" plain @click="handleDelete">å é¤</el-button> <el-button type="primary" plain @click="handlePrint">æå°</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="createTime" min-width="120" show-overflow-tooltip /> <!--<!– <el-table-column label="ä¾åºååç§°" prop="supplierName" width="250" show-overflow-tooltip />–>--> <!-- <el-table-column label="产å大类" prop="productCategory" show-overflow-tooltip />--> <!-- <el-table-column label="è§æ ¼åå·" prop="specificationModel" show-overflow-tooltip />--> <!-- <el-table-column label="åä½" prop="unit" width="80" show-overflow-tooltip />--> <!-- <el-table-column label="åºåºæ°é" prop="inboundNum" width="100" show-overflow-tooltip />--> <el-table-column label="产å大类" prop="productCategory" show-overflow-tooltip /> <el-table-column label="è§æ ¼åå·" prop="specificationModel" show-overflow-tooltip /> <el-table-column label="åä½" prop="unit" width="80" show-overflow-tooltip /> <el-table-column label="åºåºæ°é" prop="inboundNum" width="100" show-overflow-tooltip /> <!--<!– <el-table-column label="å«ç¨åä»·(å )" prop="taxInclusiveUnitPrice" width="100" show-overflow-tooltip />–>--> <!--<!– <el-table-column label="å«ç¨æ»ä»·(å )" prop="taxInclusiveTotalPrice" width="100" show-overflow-tooltip />–>--> <!--<!– <el-table-column label="ç¨ç(%)" prop="taxRate" width="100" show-overflow-tooltip />–>--> <!--<!– <el-table-column label="ä¸å«ç¨æ»ä»·(å )" prop="taxExclusiveTotalPrice" width="180" show-overflow-tooltip />–>--> <!-- <el-table-column label="åºåºäºº" prop="createBy" width="80" show-overflow-tooltip />--> <!-- </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-tab-pane>--> <el-table-column label="åºåºäºº" prop="createBy" width="80" show-overflow-tooltip /> </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-tab-pane> <el-tab-pane label="æååºåº" name="manual"> <el-tab-pane label="ææåºåº" name="manual"> <div class="search_form"> <div> <!-- <span class="search_title">ä¾åºååç§°ï¼</span>--> src/views/inventoryManagement/issueManagement/index.vue
@@ -1,7 +1,7 @@ <template> <div class="app-container"> <el-tabs v-model="activeTab" @tab-change="handleTabChange"> <el-tab-pane label="ç产åºåº" name="production"> <el-tab-pane label="æååºåº" name="production"> <div class="search_form"> <div> <!-- <span class="search_title">客æ·åç§°ï¼</span>--> @@ -29,7 +29,7 @@ :summary-method="summarizeMainTable" height="calc(100vh - 18.5em)"> <el-table-column align="center" label="åºå·" type="index" width="60" /> <el-table-column label="å ¥åºæ¶é´" prop="createTime" width="100" show-overflow-tooltip /> <el-table-column label="å ¥åºæ¹æ¬¡" prop="inboundBatches" width="160" show-overflow-tooltip /> <!-- <el-table-column label="å ¥åºæ¹æ¬¡" prop="inboundBatches" width="160" show-overflow-tooltip /> --> <!-- <el-table-column label="客æ·åç§°" prop="customerName" width="240" show-overflow-tooltip />--> <el-table-column label="产å大类" prop="productCategory" show-overflow-tooltip /> <el-table-column label="è§æ ¼åå·" prop="specificationModel" show-overflow-tooltip /> @@ -39,7 +39,7 @@ <!-- <el-table-column label="å«ç¨æ»ä»·" prop="taxInclusiveTotalPrice" width="100" show-overflow-tooltip />--> <!-- <el-table-column label="ç¨ç(%)" prop="taxRate" width="80" show-overflow-tooltip />--> <!-- <el-table-column label="ä¸å«ç¨æ»ä»·" prop="taxExclusiveTotalPrice" width="100" show-overflow-tooltip />--> <el-table-column label="å ¥åºäºº" prop="createBy" width="80" show-overflow-tooltip /> <!-- <el-table-column label="å ¥åºäºº" prop="createBy" 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(scope.row);">é¢ç¨</el-button> @@ -80,7 +80,7 @@ <el-table-column align="center" type="selection" width="55" /> <el-table-column align="center" label="åºå·" type="index" width="60" /> <el-table-column label="å ¥åºæ¶é´" prop="createTime" width="100" show-overflow-tooltip /> <el-table-column label="å ¥åºæ¹æ¬¡" prop="inboundBatches" width="160" show-overflow-tooltip /> <!-- <el-table-column label="å ¥åºæ¹æ¬¡" prop="inboundBatches" width="160" show-overflow-tooltip /> --> <!-- <!– <el-table-column label="ä¾åºååç§°" prop="supplierName" width="240" show-overflow-tooltip />–> --> <el-table-column label="产å大类" prop="productCategory" show-overflow-tooltip /> <el-table-column label="è§æ ¼åå·" prop="specificationModel" show-overflow-tooltip /> @@ -90,7 +90,7 @@ <!– <el-table-column label="å«ç¨æ»ä»·" prop="taxInclusiveTotalPrice" width="100" show-overflow-tooltip />–> <!– <el-table-column label="ç¨ç(%)" prop="taxRate" width="80" show-overflow-tooltip />–> <!– <el-table-column label="ä¸å«ç¨æ»ä»·" prop="taxExclusiveTotalPrice" width="100" show-overflow-tooltip />–> --> <el-table-column label="å ¥åºäºº" prop="createBy" width="80" show-overflow-tooltip /> <!-- <el-table-column label="å ¥åºäºº" prop="createBy" 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(scope.row);">é¢ç¨</el-button> @@ -131,7 +131,7 @@ <el-table-column align="center" type="selection" width="55" /> <el-table-column align="center" label="åºå·" type="index" width="60" /> <el-table-column label="å ¥åºæ¶é´" prop="inboundDate" width="100" show-overflow-tooltip /> <el-table-column label="å ¥åºæ¹æ¬¡" prop="inboundBatches" width="160" show-overflow-tooltip /> <!-- <el-table-column label="å ¥åºæ¹æ¬¡" prop="inboundBatches" width="160" show-overflow-tooltip /> --> <!-- <el-table-column label="ä¾åºååç§°" prop="supplierName" width="240" show-overflow-tooltip /> --> <el-table-column label="产å大类" prop="productCategory" show-overflow-tooltip /> <el-table-column label="è§æ ¼åå·" prop="specificationModel" show-overflow-tooltip /> @@ -142,7 +142,7 @@ <!-- <el-table-column label="å«ç¨æ»ä»·" prop="taxInclusiveTotalPrice" width="100" show-overflow-tooltip />--> <!-- <el-table-column label="ç¨ç(%)" prop="taxRate" width="80" show-overflow-tooltip />--> <!-- <el-table-column label="ä¸å«ç¨æ»ä»·" prop="taxExclusiveTotalPrice" width="100" show-overflow-tooltip />--> <el-table-column label="å ¥åºäºº" prop="createBy" show-overflow-tooltip /> <!-- <el-table-column label="å ¥åºäºº" prop="createBy" show-overflow-tooltip /> --> <el-table-column fixed="right" label="æä½" width="100" align="center"> <template #default="scope"> <el-button link type="primary" size="small" @click="openForm(scope.row);">é¢ç¨</el-button> src/views/inventoryManagement/receiptManagement/index.vue
@@ -1,7 +1,7 @@ <template> <div class="app-container"> <el-tabs v-model="activeTab" @tab-change="handleTabChange"> <el-tab-pane label="çäº§å ¥åº" name="production"> <el-tab-pane label="æåå ¥åº" name="production"> <div class="search_form"> <div> <!-- <span class="search_title">客æ·åç§°ï¼</span>--> @@ -46,7 +46,7 @@ </div> </el-tab-pane> <el-tab-pane label="éè´å ¥åº" name="purchase"> <el-tab-pane label="åæå ¥åº" name="purchase"> <div class="search_form"> <div> <!--<!– <span class="search_title">ä¾åºååç§°ï¼</span>–>--> src/views/inventoryManagement/stockManagement/index.vue
@@ -1,7 +1,7 @@ <template> <div class="app-container"> <el-tabs v-model="activeTab" @tab-change="handleTabChange"> <el-tab-pane label="çäº§å ¥åº" name="production"> <el-tab-pane label="æååºå" name="production"> <div class="search_form"> <div> <!-- <span class="search_title">客æ·åç§°ï¼</span>--> @@ -55,54 +55,54 @@ </div> </el-tab-pane> <!-- <el-tab-pane label="éè´å ¥åº" name="purchase">--> <!-- <div class="search_form">--> <!-- <div>--> <!-- <span class="search_title ml10">å ¥åºæ¥æï¼</span>--> <!-- <el-date-picker--> <!-- v-model="searchForm.timeStr"--> <!-- type="date"--> <!-- placeholder="è¯·éæ©æ¥æ"--> <!-- value-format="YYYY-MM-DD"--> <!-- format="YYYY-MM-DD"--> <!-- clearable--> <!-- @change="handleQuery"--> <!-- />--> <!-- <el-button type="primary" @click="handleQuery" style="margin-left: 10px">æç´¢</el-button>--> <!-- </div>--> <!-- <div>--> <!-- <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%"--> <!-- :row-class-name="tableRowClassName"--> <!-- :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="createTime" width="100" show-overflow-tooltip />--> <!-- <el-table-column label="产å大类" prop="productCategory" show-overflow-tooltip />--> <!-- <el-table-column label="è§æ ¼åå·" prop="specificationModel" show-overflow-tooltip />--> <!-- <el-table-column label="åä½" prop="unit" width="80" show-overflow-tooltip />--> <!-- <el-table-column label="åºåæ°é" prop="inboundNum" width="100" show-overflow-tooltip />--> <!-- <el-table-column label="å·²åºåºæ°é" prop="totalInboundNum" show-overflow-tooltip />--> <!-- <el-table-column label="å¾ åºåºæ°é" prop="inboundNum0" show-overflow-tooltip />--> <!-- <el-table-column label="åºåé¢è¦æ°é" prop="warnNum" width="130" show-overflow-tooltip />--> <!-- <el-table-column label="å ¥åºäºº" prop="createBy" 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-tab-pane>--> <el-tab-pane label="åæåºå" name="purchase"> <div class="search_form"> <div> <span class="search_title ml10">å ¥åºæ¥æï¼</span> <el-date-picker v-model="searchForm.timeStr" type="date" placeholder="è¯·éæ©æ¥æ" value-format="YYYY-MM-DD" format="YYYY-MM-DD" clearable @change="handleQuery" /> <el-button type="primary" @click="handleQuery" style="margin-left: 10px">æç´¢</el-button> </div> <div> <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%" :row-class-name="tableRowClassName" :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="createTime" width="100" show-overflow-tooltip /> <el-table-column label="产å大类" prop="productCategory" show-overflow-tooltip /> <el-table-column label="è§æ ¼åå·" prop="specificationModel" show-overflow-tooltip /> <el-table-column label="åä½" prop="unit" width="80" show-overflow-tooltip /> <el-table-column label="åºåæ°é" prop="inboundNum" width="100" show-overflow-tooltip /> <el-table-column label="å·²åºåºæ°é" prop="totalInboundNum" show-overflow-tooltip /> <el-table-column label="å¾ åºåºæ°é" prop="inboundNum0" show-overflow-tooltip /> <!-- <el-table-column label="åºåé¢è¦æ°é" prop="warnNum" width="130" show-overflow-tooltip /> <el-table-column label="å ¥åºäºº" prop="createBy" 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-tab-pane> <el-tab-pane label="æåå ¥åº" name="manual"> <el-tab-pane label="ææåºå" name="manual"> <div class="search_form"> <div> <!-- <span class="search_title">ä¾åºååç§°ï¼</span>--> @@ -161,16 +161,25 @@ @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-col :span="12"> <el-form-item label="ä¾åºååç§°ï¼" prop="supplierName"> <el-input disabled v-model="form.supplierName" placeholder="请è¾å ¥" clearable /> </el-form-item> </el-col> </el-col> --> <el-col :span="12"> <el-form-item label="产å大类ï¼" prop="productId"> <el-select disabled v-model="form.productCategory" placeholder="è¯·éæ©" clearable filterable> <el-option v-for="item in productList" :key="item.id" :label="item.productName" :value="item.productName" /> </el-select> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="åºåºäººï¼" prop="entryPerson"> <el-select v-model="form.createUser" filterable default-first-option :reserve-keyword="false" 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> @@ -230,7 +239,7 @@ </el-form-item> </el-col> </el-row> <el-row :gutter="30"> <!-- <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="åºåºäººï¼" prop="entryPerson"> <el-select v-model="form.createUser" filterable @@ -240,12 +249,12 @@ </el-select> </el-form-item> </el-col> <!-- <el-col :span="12">--> <!-- <el-form-item label="åºåé¢è¦æ°éï¼" prop="warnNum">--> <!-- <el-input v-model="form.warnNum" placeholder="请è¾å ¥æä½åºå" clearable />--> <!-- </el-form-item>--> <!-- </el-col>--> </el-row> <el-col :span="12"> <el-form-item label="åºåé¢è¦æ°éï¼" prop="warnNum"> <el-input v-model="form.warnNum" placeholder="请è¾å ¥æä½åºå" clearable /> </el-form-item> </el-col> </el-row> --> </el-form> <template #footer> <div class="dialog-footer"> @@ -299,13 +308,13 @@ const activeTab = ref('production') const data = reactive({ searchForm: { supplierName: '', // supplierName: '', customerName: '', timeStr: getCurrentDate(), }, form: { supplierId: null, supplierName: '', // supplierName: '', productId: null, productName: '', userId: userStore.userId, @@ -326,7 +335,7 @@ salesLedgerProductId: null, }, rules: { supplierName: [{ required: true, message: '请è¾å ¥ä¾åºååç§°', trigger: 'blur' }], // supplierName: [{ required: true, message: '请è¾å ¥ä¾åºååç§°', trigger: 'blur' }], productCategory: [{ required: true, message: 'è¯·éæ©äº§å大类', trigger: 'change' }], specificationModel: [{ required: true, message: '请è¾å ¥è§æ ¼åå·', trigger: 'blur' }], unit: [{ required: true, message: '请è¾å ¥åä½', trigger: 'blur' }], @@ -362,7 +371,7 @@ if (activeTab.value === 'production') { params.customerName = searchForm.value.customerName } else { params.supplierName = searchForm.value.supplierName // params.supplierName = searchForm.value.supplierName } return params } @@ -392,7 +401,7 @@ // 忢 tab const handleTabChange = () => { page.current = 1 searchForm.value.supplierName = '' // searchForm.value.supplierName = '' searchForm.value.customerName = '' searchForm.value.timeStr = '' selectedRows.value = [] src/views/procurementManagement/invoiceEntry/components/Modal.vue
@@ -1,91 +1,100 @@ <template> <el-dialog :title="modalOptions.title" v-model="visible" width="70%"> <el-form ref="formRef" :model="form" :rules="rules" label-width="120px" label-position="top" > <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="éè´ååå·ï¼" prop="purchaseLedgerNo"> <el-input v-model="form.purchaseLedgerNo" disabled /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="éå®ååå·ï¼" prop="salesContractNo"> <el-input v-model="form.salesContractNo" placeholder="èªå¨å¡«å " clearable disabled /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="ä¾åºååç§°ï¼" prop="supplierName"> <el-input v-model="form.supplierName" placeholder="èªå¨å¡«å " clearable disabled /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="å票å·ï¼" prop="invoiceNumber"> <el-input v-model="form.invoiceNumber" placeholder="请è¾å ¥" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="å票éé¢(å )ï¼" prop="invoiceAmount"> <el-input-number :step="0.01" :min="0" style="width: 100%" v-model="form.invoiceAmount" placeholder="èªå¨å¡«å " clearable :disabled="true" /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="å½å ¥äººï¼" prop="issUer"> <el-input v-model="form.issUer" placeholder="请è¾å ¥" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="å¼ç¥¨æ¥æï¼" prop="entryDate"> <el-date-picker style="width: 100%" v-model="form.entryDate" type="date" value-format="YYYY-MM-DD" format="YYYY-MM-DD" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="å½å ¥æ¥æï¼" prop="enterDate"> <el-date-picker style="width: 100%" v-model="form.enterDate" type="date" value-format="YYYY-MM-DD" format="YYYY-MM-DD" clearable /> </el-form-item> </el-col> <el-dialog :title="modalOptions.title" v-model="visible" width="70%"> <el-form ref="formRef" :model="form" :rules="rules" label-width="120px" label-position="top" > <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="éè´ååå·ï¼" prop="purchaseLedgerNo"> <el-input v-model="form.purchaseLedgerNo" disabled placeholder="å¤ååæ¹éå¤çï¼å ·ä½ååå·è§äº§åå表ï¼" /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="éå®ååå·ï¼" prop="salesContractNo"> <el-input v-model="form.salesContractNo" placeholder="èªå¨å¡«å " clearable disabled /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="ä¾åºååç§°ï¼" prop="supplierName"> <el-input v-model="form.supplierName" placeholder="èªå¨å¡«å " clearable disabled /> </el-form-item> </el-col> <!-- <el-col :span="12">--> <!-- <el-form-item label="项ç®åç§°ï¼" prop="projectName">--> <!-- <el-input--> <!-- v-model="form.projectName"--> <!-- placeholder="èªå¨å¡«å "--> <!-- clearable--> <!-- disabled--> <!-- />--> <!-- </el-form-item>--> <!-- </el-col>--> <el-col :span="12"> <el-form-item label="å票å·ï¼" prop="invoiceNumber"> <el-input v-model="form.invoiceNumber" placeholder="请è¾å ¥" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="å票éé¢(å )ï¼" prop="invoiceAmount"> <el-input-number :step="0.01" :min="0" style="width: 100%" v-model="form.invoiceAmount" placeholder="请è¾å ¥å票éé¢" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="å½å ¥äººï¼" prop="issUer"> <el-input v-model="form.issUer" placeholder="请è¾å ¥" clearable disabled /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="å¼ç¥¨æ¥æï¼" prop="entryDate"> <el-date-picker style="width: 100%" v-model="form.entryDate" type="date" value-format="YYYY-MM-DD" format="YYYY-MM-DD" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="å½å ¥æ¥æï¼" prop="enterDate"> <el-date-picker style="width: 100%" v-model="form.enterDate" type="date" value-format="YYYY-MM-DD" format="YYYY-MM-DD" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="ä¸ä¼ éä»¶"> <FileUpload @@ -102,49 +111,92 @@ /> </el-form-item> </el-col> </el-row> <el-form-item label="产åä¿¡æ¯ï¼"> </el-form-item> <PIMTable rowKey="id" :column="columns" :tableData="form.productData" :summaryMethod="summarizeChildrenTable" :isShowSummary="true" height="auto" > <template #ticketsNumRef="{ row }"> <el-input-number v-model="row.ticketsNum" placeholder="请è¾å ¥" :min="0" :step="0.1" :precision="2" clearable style="width: 100%" @change="invoiceNumBlur(row)" /> </template> <template #ticketsAmountRef="{ row }"> <el-input-number v-model="row.ticketsAmount" placeholder="请è¾å ¥" :min="0" :precision="2" :step="0.1" clearable style="width: 100%" @change="invoiceAmountBlur(row)" /> </template> </PIMTable> </el-form> <template #footer> </el-row> <el-form-item label="产åä¿¡æ¯ï¼"> </el-form-item> <el-table :data="form.productData" border show-summary :summary-method="summarizeChildrenTable" > <el-table-column align="center" label="åºå·" type="index" width="60" /> <el-table-column label="æå±åå" prop="purchaseLedgerNo" width="200"> <template #default="{ row }"> <el-tag type="primary">{{ row.purchaseLedgerNo }}</el-tag> </template> </el-table-column> <el-table-column label="产å大类" prop="productCategory" /> <el-table-column label="è§æ ¼åå·" prop="specificationModel" width="150" /> <el-table-column label="åä½" prop="unit" width="70" /> <el-table-column label="æ°é" prop="quantity" width="70" /> <el-table-column label="ç¨ç(%)" prop="taxRate" width="80" /> <el-table-column label="å«ç¨åä»·(å )" prop="taxInclusiveUnitPrice" :formatter="formattedNumber" /> <el-table-column label="å«ç¨æ»ä»·(å )" prop="taxInclusiveTotalPrice" :formatter="formattedNumber" /> <el-table-column label="ä¸å«ç¨æ»ä»·(å )" prop="taxExclusiveTotalPrice" :formatter="formattedNumber" /> <el-table-column label="æ¬æ¬¡å¼ç¥¨æ°" prop="ticketsNum" width="180"> <template #default="scope"> <el-input-number :step="0.1" :min="0" style="width: 100%" :precision="2" v-model="scope.row.ticketsNum" @change="invoiceNumBlur(scope.row)" /> </template> </el-table-column> <el-table-column label="æ¬æ¬¡å¼ç¥¨éé¢(å )" prop="ticketsAmount" width="180" > <template #default="scope"> <el-input-number :step="0.01" :min="0" style="width: 100%" :precision="2" v-model="scope.row.ticketsAmount" @change="invoiceAmountBlur(scope.row)" /> </template> </el-table-column> <el-table-column label="æªæ¥ç¥¨æ°" prop="futureTickets" :formatter="formattedNumber" /> <el-table-column label="æ¬æ¬¡æ¥ç¥¨éé¢(å )" prop="ticketsAmount" :formatter="formattedNumber" /> <el-table-column label="æªæ¥ç¥¨æ°" prop="futureTickets" :formatter="formattedNumber" /> <el-table-column label="æªæ¥ç¥¨éé¢(å )" prop="futureTicketsAmount" :formatter="formattedNumber" /> </el-table> </el-form> <template #footer> <el-button type="primary" :loading="modalLoading" @click="submitForm"> {{ modalOptions.confirmText }} 确认 </el-button> <el-button @click="closeModal">{{ modalOptions.cancelText }}</el-button> </template> </el-dialog> <el-button @click="closeModal">åæ¶</el-button> </template> </el-dialog> </template> <script setup> @@ -154,9 +206,9 @@ import useFormData from "@/hooks/useFormData"; import FileUpload from "@/components/Upload/FileUpload.vue"; import { getPurchaseNoById, getInfo, addOrUpdateRegistration, getPurchaseNoById, getInfo, addOrUpdateRegistration, } from "@/api/procurementManagement/invoiceEntry.js"; import { getPurchaseById } from "@/api/procurementManagement/procurementLedger.js"; import { getToken } from "@/utils/auth"; @@ -164,7 +216,7 @@ import dayjs from "dayjs"; defineOptions({ name: "æ¥ç¥¨ç»è®°æ¨¡ææ¡", name: "æ¥ç¥¨ç»è®°æ¨¡ææ¡", }); const userStore = useUserStore(); @@ -172,152 +224,218 @@ const formRef = ref(); const { proxy } = getCurrentInstance(); const { form } = useFormData({ purchaseLedgerNo: undefined, // éè´ååå· salesContractNo: undefined, // éå®ååå· supplierName: undefined, // ä¾åºååç§° invoiceNumber: undefined, // åç¥¨å· invoiceAmount: undefined, // å票éé¢(å ) issUerId: userStore.id, // å½å ¥äºº issUer: userStore.nickName, // å½å ¥äºº entryDate: undefined, // å¼ç¥¨æ¥æ salesContractNoId: undefined, // å¼ç¥¨æ¥æ enterDate: dayjs().format("YYYY-MM-DD"), productData: [], // è¡¨æ ¼ tempFileIds: [], // æä»¶ purchaseLedgerNo: undefined, // éè´ååå· salesContractNo: undefined, // éå®ååå· supplierName: undefined, // ä¾åºååç§° projectName: undefined, // 项ç®åç§° invoiceNumber: undefined, // åç¥¨å· invoiceAmount: undefined, // å票éé¢(å ) issUerId: userStore.id, // å½å ¥äºº issUer: userStore.nickName, // å½å ¥äºº entryDate: undefined, // å¼ç¥¨æ¥æ salesContractNoId: undefined, // å¼ç¥¨æ¥æ enterDate: dayjs().format("YYYY-MM-DD"), productData: [], // è¡¨æ ¼ tempFileIds: [], // æä»¶ }); const selectedContracts = ref([]); // åå¨éä¸çååæ°æ® const rules = ref({ invoiceNumber: [ { required: true, message: "请è¾å ¥å票å·", trigger: "blur" }, { type: "string" }, ], invoiceAmount: [ { required: true, message: "请è¾å ¥å票éé¢", trigger: "blur" }, ], entryDate: [{ required: true, message: "è¯·éæ©å¼ç¥¨æ¥æ", trigger: "change" }], enterDate: [{ required: true, message: "è¯·éæ©å½å ¥æ¥æ", trigger: "change" }], invoiceNumber: [ { required: true, message: "请è¾å ¥å票å·", trigger: "blur" }, { type: "string" }, ], invoiceAmount: [ { required: true, message: "请è¾å ¥å票éé¢", trigger: "blur" }, ], entryDate: [{ required: true, message: "è¯·éæ©å¼ç¥¨æ¥æ", trigger: "change" }], enterDate: [{ required: true, message: "è¯·éæ©å½å ¥æ¥æ", trigger: "change" }], }); const { id, visible, loading: modalLoading, openModal, modalOptions, handleConfirm, closeModal, id, visible, loading: modalLoading, openModal, modalOptions, handleConfirm, closeModal, } = useModal({ title: "æ¥ç¥¨ç»è®°", title: "æ¥ç¥¨ç»è®°", }); const emit = defineEmits(['refreshList']); const columns = [ { label: "产å大类", prop: "productCategory", { label: "产å大类", prop: "productCategory", width: 120, }, { label: "è§æ ¼åå·", prop: "specificationModel", }, { label: "è§æ ¼åå·", prop: "specificationModel", width: 120, }, { label: "åä½", prop: "unit", width: 80, }, { label: "æ°é", prop: "quantity", width: 80, }, { label: "ç¨ç(%)", prop: "taxRate", width: 80, }, { label: "å½å ¥æ¥æ", prop: "registerDate", width: 120, }, { label: "å«ç¨åä»·(å )", prop: "taxInclusiveUnitPrice", width: 150, formatData: (val) => { return val ? parseFloat(val).toFixed(2) : 0; }, }, { label: "å«ç¨æ»ä»·(å )", prop: "taxInclusiveTotalPrice", width: 150, formatData: (val) => { return parseFloat(val).toFixed(2) ?? 0; }, }, { label: "ä¸å«ç¨æ»ä»·(å )", prop: "taxExclusiveTotalPrice", width: 150, formatData: (val) => { return parseFloat(val).toFixed(2) ?? 0; }, }, { label: "æ¬æ¬¡æ¥ç¥¨æ°", prop: "ticketsNum", dataType: "slot", slot: "ticketsNumRef", width: 180, align: "center", }, { label: "æ¬æ¬¡æ¥ç¥¨éé¢(å )", prop: "ticketsAmount", dataType: "slot", slot: "ticketsAmountRef", width: 180, align: "center", }, { label: "æªæ¥ç¥¨æ°", prop: "futureTickets", }, { label: "åä½", prop: "unit", width: 80, }, { label: "æ°é", prop: "quantity", width: 80, }, { label: "ç¨ç(%)", prop: "taxRate", width: 80, }, { label: "å½å ¥æ¥æ", prop: "registerDate", width: 120, }, { label: "å«ç¨åä»·(å )", prop: "taxInclusiveUnitPrice", width: 150, formatData: (val) => { return val ? parseFloat(val).toFixed(2) : 0; }, }, { label: "å«ç¨æ»ä»·(å )", prop: "taxInclusiveTotalPrice", width: 150, formatData: (val) => { return parseFloat(val).toFixed(2) ?? 0; }, }, { label: "ä¸å«ç¨æ»ä»·(å )", prop: "taxExclusiveTotalPrice", width: 150, formatData: (val) => { return parseFloat(val).toFixed(2) ?? 0; }, }, { label: "æ¬æ¬¡æ¥ç¥¨æ°", prop: "ticketsNum", dataType: "slot", slot: "ticketsNumRef", width: 180, align: "center", }, { label: "æ¬æ¬¡æ¥ç¥¨éé¢(å )", prop: "ticketsAmount", dataType: "slot", slot: "ticketsAmountRef", width: 180, align: "center", }, { label: "æªæ¥ç¥¨æ°", prop: "futureTickets", width: 100, }, { label: "æªæ¥ç¥¨éé¢(å )", prop: "futureTicketsAmount", }, { label: "æªæ¥ç¥¨éé¢(å )", prop: "futureTicketsAmount", width: 200, }, }, ]; const getTableData = async (type, id) => { if (type == "add") { const { data } = await getPurchaseNoById({ id }); form.purchaseLedgerNo = data.purchaseContractNumber; form.invoiceAmount = data.invoiceAmount; form.invoiceNumber = data.invoiceNumber; form.entryDate = data.entryDate; form.salesContractNoId = data.salesContractNoId; const { data: infoData } = await getInfo({ id }); form.salesContractNo = infoData.salesContractNo; form.supplierName = infoData.supplierName; form.productData = infoData.productData; } else if (type == "edit") { const data = await getPurchaseById({ id, type: 2 }); form.purchaseLedgerNo = data.purchaseContractNumber; form.invoiceAmount = data.invoiceAmount; form.invoiceNumber = data.invoiceNumber; form.salesContractNo = data.salesContractNo; form.supplierName = data.supplierName; form.entryDate = data.entryDate; form.productData = data.productData; } const formattedNumber = (row, column, cellValue) => { if (cellValue == 0) { return parseFloat(cellValue).toFixed(2); } if (cellValue) { return parseFloat(cellValue).toFixed(2); } else { return cellValue; } }; const getTableData = async (type, selectedRows) => { if (type == "add") { // æ£æ¥ææéæ©çå忝å¦å ·æç¸åçä¾åºååç§° const firstRow = selectedRows[0]; const isSameSupplier = selectedRows.every(row => row.supplierName === firstRow.supplierName ); if (!isSameSupplier) { proxy.$modal.msgError("è¯·éæ©ç¸åä¾åºååç§°çåå"); return; } // å 许ä¸åçéè´ååå·æ¹éå¤çï¼æ 鿣æ¥éå¤ // æ¸ ç©ºè¡¨åæ°æ® Object.keys(form).forEach(key => { if (key !== 'productData') { form[key] = undefined; } }); form.productData = []; // å è½½ææéä¸ååçäº§åæ°æ® const promises = selectedRows.map(row => getInfo({ id: row.id }) ); Promise.all(promises).then(results => { // åå¹¶ææååçäº§åæ°æ®ï¼å¹¶ä¸ºæ¯ä¸ªäº§åæ·»å 对åºçååä¿¡æ¯ const allProductData = []; results.forEach((result, index) => { const contract = selectedRows[index]; const contractId = contract.id; if (result.data && result.data.productData) { result.data.productData.forEach(item => { allProductData.push({ ...item, id: contractId, // æç¡®è®¾ç½®ååID purchaseLedgerNo: contract.purchaseContractNumber, // æ·»å éè´ååå· supplierName: contract.supplierName, // æ·»å ä¾åºååç§° projectName: contract.projectName // æ·»å 项ç®åç§° }); }); } }); // è®¾ç½®è¡¨åæ°æ®ï¼ä½¿ç¨ç¬¬ä¸ä¸ªååçåºæ¬ä¿¡æ¯ï¼éè´ååå·çç©ºï¼ form.purchaseLedgerNo = ""; // éè´ååå·ç空ï¼å 为ä¼å¨äº§åè¡¨æ ¼ä¸å嫿¾ç¤º form.invoiceAmount = 0; form.invoiceNumber = ""; form.entryDate = dayjs().format("YYYY-MM-DD"); form.enterDate = dayjs().format("YYYY-MM-DD"); form.salesContractNo = results[0].data.salesContractNo; form.projectName = results[0].data.projectName; form.supplierName = results[0].data.supplierName; // ä¿çå½å ¥äººä¿¡æ¯ form.issUerId = userStore.id; form.issUer = userStore.nickName; form.productData = allProductData; // åå¨éä¸çååæ°æ® selectedContracts.value = selectedRows; }); } else if (type == "edit") { const id = Array.isArray(selectedRows) ? selectedRows[0].id : selectedRows; const data = await getPurchaseById({ id, type: 2 }); form.purchaseLedgerNo = data.purchaseContractNumber; form.invoiceAmount = data.invoiceAmount; form.invoiceNumber = data.invoiceNumber; form.salesContractNo = data.salesContractNo; form.projectName = data.projectName; form.supplierName = data.supplierName; form.entryDate = data.entryDate; form.productData = data.productData; } }; // å表åè®¡æ¹æ³ const summarizeChildrenTable = (param) => { @@ -334,108 +452,186 @@ }; //æ¬æ¬¡æ¥ç¥¨æ°å¤±ç¦æä½ const invoiceNumBlur = (row) => { if (!row.ticketsNum || row.ticketsNum === "") { row.ticketsNum = 0; } if (Number(row.ticketsNum) > Number(row.tempFutureTickets)) { proxy.$modal.msgWarning("æ¬æ¬¡å¼ç¥¨æ°ä¸å¾å¤§äºæªå¼ç¥¨æ°"); row.ticketsNum = 0; return; } // è®¡ç®æ¬æ¬¡æ¥ç¥¨éé¢ row.ticketsAmount = (row.ticketsNum * row.taxInclusiveUnitPrice).toFixed(2) // è®¡ç®æªæ¥ç¥¨æ° row.futureTickets = (row.tempFutureTickets - row.ticketsNum).toFixed(2) // è®¡ç®æªæ¥ç¥¨éé¢ row.futureTicketsAmount = (row.tempFutureTicketsAmount - row.ticketsAmount).toFixed(2) calculateinvoiceAmount(); if (!row.ticketsNum || row.ticketsNum === "") { row.ticketsNum = 0; } if (Number(row.ticketsNum) > Number(row.tempFutureTickets)) { proxy.$modal.msgWarning("æ¬æ¬¡å¼ç¥¨æ°ä¸å¾å¤§äºæªå¼ç¥¨æ°"); row.ticketsNum = 0; return; } // è®¡ç®æ¬æ¬¡æ¥ç¥¨éé¢ row.ticketsAmount = (row.ticketsNum * row.taxInclusiveUnitPrice).toFixed(2) // è®¡ç®æªæ¥ç¥¨æ° row.futureTickets = (row.tempFutureTickets - row.ticketsNum).toFixed(2) // è®¡ç®æªæ¥ç¥¨éé¢ row.futureTicketsAmount = (row.tempFutureTicketsAmount - row.ticketsAmount).toFixed(2) calculateinvoiceAmount(); }; // æ¬æ¬¡æ¥ç¥¨éé¢å¤±ç¦æä½ const invoiceAmountBlur = (row) => { if (!row.ticketsAmount) { row.ticketsAmount = 0; } // è®¡ç®æ¯å¦è¶ è¿æ¥ç¥¨æ»éé¢ if (row.ticketsAmount > row.tempFutureTicketsAmount) { proxy.$modal.msgWarning("æ¬æ¬¡æ¥ç¥¨éé¢ä¸å¾å¤§äºæªæ¥ç¥¨éé¢"); row.ticketsAmount = 0; } // è®¡ç®æ¬æ¬¡æ¥ç¥¨æ° row.ticketsNum = Number( (row.ticketsAmount / row.taxInclusiveUnitPrice).toFixed(2) ); // è®¡ç®æªæ¥ç¥¨æ° row.futureTickets = (row.tempFutureTickets - row.ticketsNum).toFixed(2) // è®¡ç®æªæ¥ç¥¨éé¢ row.futureTicketsAmount = (row.tempFutureTicketsAmount - row.ticketsAmount).toFixed(2) calculateinvoiceAmount(); if (!row.ticketsAmount) { row.ticketsAmount = 0; } // è®¡ç®æ¯å¦è¶ è¿æ¥ç¥¨æ»éé¢ if (row.ticketsAmount > row.tempFutureTicketsAmount) { proxy.$modal.msgWarning("æ¬æ¬¡æ¥ç¥¨éé¢ä¸å¾å¤§äºæªæ¥ç¥¨éé¢"); row.ticketsAmount = 0; } // è®¡ç®æ¬æ¬¡æ¥ç¥¨æ° row.ticketsNum = Number( (row.ticketsAmount / row.taxInclusiveUnitPrice).toFixed(2) ); // è®¡ç®æªæ¥ç¥¨æ° row.futureTickets = (row.tempFutureTickets - row.ticketsNum).toFixed(2) // è®¡ç®æªæ¥ç¥¨éé¢ row.futureTicketsAmount = (row.tempFutureTicketsAmount - row.ticketsAmount).toFixed(2) calculateinvoiceAmount(); }; const calculateinvoiceAmount = () => { let invoiceAmountTotal = 0; form.productData.forEach((item) => { if (item.ticketsAmount) { invoiceAmountTotal += Number(item.ticketsAmount); } }); form.invoiceAmount = invoiceAmountTotal.toFixed(2); let invoiceAmountTotal = 0; form.productData.forEach((item) => { if (item.ticketsAmount) { invoiceAmountTotal += Number(item.ticketsAmount); } }); form.invoiceAmount = invoiceAmountTotal.toFixed(2); }; const open = (type, eid) => { openModal(); getTableData(type, eid); id.value = eid; const open = async (type, selectedRows) => { visible.value = true; // å¦ææ¯æ¹éæä½ï¼è®¾ç½®æ é¢ if (Array.isArray(selectedRows) && selectedRows.length > 1) { modalOptions.title = `æ¹éæ°å¢ (${selectedRows.length}æ¡)`; } else { modalOptions.title = type == "add" ? "æ°å¢" : "ç¼è¾"; } // 妿æ¯å个æä½ï¼è·åid if (!Array.isArray(selectedRows) || selectedRows.length === 1) { const idValue = Array.isArray(selectedRows) ? selectedRows[0].id : selectedRows; id.value = idValue; } await getTableData(type, selectedRows); }; const uploadSuccess = (response) => { form.tempFileIds.push(response.data.tempId); console.log(form); form.tempFileIds.push(response.data.tempId); console.log(form); }; const removeFile = (file) => { const { tempId } = file.response.data; form.tempFileIds = form.tempFileIds.filter((item) => item !== tempId); const { tempId } = file.response.data; form.tempFileIds = form.tempFileIds.filter((item) => item !== tempId); }; const closeAndRefresh = () => { closeModal(); emit('refreshList'); closeModal(); emit('refreshList'); }; const submitForm = () => { formRef.value.validate(async (valid, fields) => { if (valid) { // modalLoading.value = true; const { code } = await addOrUpdateRegistration({ purchaseLedgerId: id.value, purchaseContractNumber: form.purchaseLedgerNo, invoiceNumber: form.invoiceNumber, invoiceAmount: form.invoiceAmount, salesContractNo: form.salesContractNo, productData: form.productData, issueDate: form.entryDate, issUerId: form.issUerId, // å½å ¥äººid issUer: form.issUer, // å½å ¥äºº salesContractNoId: form.salesContractNoId, supplierName: form.supplierName, tempFileIds: form.tempFileIds, enterDate: form.enterDate, type: 4, }); modalLoading.value = false; if (code == 200) { closeAndRefresh(); } } else { modalLoading.value = false; } }); proxy.$refs["formRef"].validate((valid) => { if (valid) { // å¦ææ¯æ¹éæä½ï¼å°ææååçæ°æ®æ¾å¨ä¸ä¸ªæ°ç»éï¼åªè°ç¨ä¸æ¬¡æ¥å£ if (selectedContracts.value.length > 1) { // å建å 嫿æååæ°æ®çæ°ç» const batchData = selectedContracts.value.map(contract => { // çéåºå±äºå½åååçäº§åæ°æ® const contractProductData = form.productData.filter(item => item.id === contract.id ); // 为æ¯ä¸ªéè´ååå建ç¬ç«ç对象 return { // åºç¡è¡¨åæ°æ® invoiceNumber: form.invoiceNumber, invoiceAmount: form.invoiceAmount, entryDate: form.entryDate, enterDate: form.enterDate, issUerId: form.issUerId, // å½å ¥äººid issUer: form.issUer, // å½å ¥äºº tempFileIds: form.tempFileIds, // ååå®é ä¿¡æ¯ purchaseLedgerId: contract.id, // 使ç¨idä½ä¸ºå段åï¼å¼ä¸ºpurchaseLedgerId purchaseContractNumber: contract.purchaseContractNumber, // 使ç¨å®é çéè´ååå· salesContractNo: contract.salesContractNo, // 使ç¨å®é çéå®ååå· supplierName: contract.supplierName, // 使ç¨å®é çä¾åºååç§° projectName: contract.projectName, // 使ç¨å®é ç项ç®åç§° // äº§åæ°æ® productData: proxy.HaveJson(contractProductData), // æ¹éæ è¯ isBatch: true, type: 4 }; }); // åªè°ç¨ä¸æ¬¡æ¥å£ï¼ä¼ éå 嫿æååæ°æ®çæ°ç» modalLoading.value = true; addOrUpdateRegistration(batchData).then((res) => { modalLoading.value = false; if (res.code === 200) { proxy.$modal.msgSuccess("æ¹éç»è®°æå"); closeAndRefresh(); } }).catch(() => { modalLoading.value = false; proxy.$modal.msgError("æ¹éç»è®°å¤±è´¥"); }); } else { // å个ååæäº¤é»è¾ const singleContract = selectedContracts.value[0]; const singleForm = { // åºç¡è¡¨åæ°æ® invoiceNumber: form.invoiceNumber, invoiceAmount: form.invoiceAmount, entryDate: form.entryDate, enterDate: form.enterDate, issUerId: form.issUerId, // å½å ¥äººid issUer: form.issUer, // å½å ¥äºº tempFileIds: form.tempFileIds, // ååå®é ä¿¡æ¯ purchaseLedgerId: singleContract.id, // 使ç¨idä½ä¸ºå段åï¼å¼ä¸ºpurchaseLedgerId purchaseContractNumber: singleContract.purchaseContractNumber, // 使ç¨å®é çéè´ååå· salesContractNo: singleContract.salesContractNo, // 使ç¨å®é çéå®ååå· supplierName: singleContract.supplierName, // 使ç¨å®é çä¾åºååç§° projectName: singleContract.projectName, // 使ç¨å®é ç项ç®åç§° // äº§åæ°æ® productData: proxy.HaveJson(form.productData), // æ¹éæ è¯ isBatch: false, type: 4 }; modalLoading.value = true; addOrUpdateRegistration(singleForm).then((res) => { modalLoading.value = false; if (res.code === 200) { proxy.$modal.msgSuccess("ç»è®°æå"); closeAndRefresh(); } }).catch(() => { modalLoading.value = false; proxy.$modal.msgError("ç»è®°å¤±è´¥"); }); } } }); }; defineExpose({ open, closeAndRefresh, open, closeAndRefresh, }); </script> src/views/procurementManagement/invoiceEntry/index.vue
@@ -186,11 +186,11 @@ }; const handleAdd = (type) => { if (selectedRows.value.length !== 1) { proxy.$modal.msgWarning("请å éä¸ä¸æ¡æ°æ®"); return; } modalRef.value.open(type, selectedRows.value[0].id); if (selectedRows.value.length < 1) { proxy.$modal.msgWarning("请è³å°éä¸ä¸æ¡æ°æ®"); return; } modalRef.value.open(type, selectedRows.value); }; const handleEdit = (type, id) => { src/views/procurementManagement/procurementInvoiceLedger/Form/EditForm.vue
@@ -23,7 +23,7 @@ </el-col> <el-col :span="12"> <el-form-item label="å票å·ï¼"> <el-input disabled v-model="form.invoiceNumber" /> <el-input v-model="form.invoiceNumber" /> </el-form-item> </el-col> <el-col :span="12"> @@ -63,6 +63,7 @@ ticketsNum: undefined, // æ¥ç¥¨æ° ticketsAmount: undefined, // æ¥ç¥¨éé¢ taxInclusiveUnitPrice: undefined, // å«ç¨åä»· ticketRegistrationId: undefined, // å«ç¨åä»· }); const load = async (id) => { @@ -78,6 +79,7 @@ form.taxInclusiveUnitPrice = data.taxInclusiveUnitPrice; form.futureTickets = data.futureTickets; temFutureTickets.value = data.futureTickets; form.ticketRegistrationId = data.ticketRegistrationId; } }; src/views/procurementManagement/procurementLedger/fileList.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,67 @@ <template> <el-dialog v-model="dialogVisible" title="éä»¶" width="40%" :before-close="handleClose"> <el-table :data="tableData" border height="40vh"> <el-table-column label="éä»¶åç§°" prop="name" min-width="400" show-overflow-tooltip /> <el-table-column fixed="right" label="æä½" width="150" align="center"> <template #default="scope"> <el-button link type="primary" size="small" @click="downLoadFile(scope.row)">ä¸è½½</el-button> <el-button link type="primary" size="small" @click="lookFile(scope.row)">é¢è§</el-button> <el-button link type="danger" size="small" @click="handleDelete(scope.row)">å é¤</el-button> </template> </el-table-column> </el-table> </el-dialog> <filePreview ref="filePreviewRef" /> </template> <script setup> import { ref } from 'vue' import { ElMessageBox, ElMessage } from 'element-plus' import filePreview from '@/components/filePreview/index.vue' import { delCommonFile } from '@/api/publicApi/commonFile.js' const dialogVisible = ref(false) const tableData = ref([]) const { proxy } = getCurrentInstance(); const filePreviewRef = ref() const handleClose = () => { dialogVisible.value = false } const open = (list) => { dialogVisible.value = true tableData.value = list } const downLoadFile = (row) => { proxy.$download.name(row.url); } const lookFile = (row) => { filePreviewRef.value.open(row.url) } // å é¤éä»¶ const handleDelete = (row) => { ElMessageBox.confirm(`确认å é¤éä»¶"${row.name}"åï¼`, 'å é¤ç¡®è®¤', { confirmButtonText: '确认', cancelButtonText: 'åæ¶', type: 'warning', }).then(() => { delCommonFile([row.id]).then(() => { ElMessage.success('å 餿å') // ä»å表ä¸ç§»é¤å·²å é¤çéä»¶ const index = tableData.value.findIndex(item => item.id === row.id) if (index !== -1) { tableData.value.splice(index, 1) } }).catch(() => { ElMessage.error('å é¤å¤±è´¥') }) }).catch(() => { proxy.$modal.msg('已忶å é¤') }) } defineExpose({ open }) </script> <style></style> src/views/procurementManagement/procurementLedger/index.vue
@@ -99,12 +99,10 @@ <el-table-column label="éå®ååå·" prop="salesContractNo" width="200" show-overflow-tooltip /> <el-table-column label="ä¾åºååç§°" width="240" prop="supplierName" show-overflow-tooltip /> @@ -124,7 +122,7 @@ <el-table-column label="å½å ¥äºº" prop="recorderName" width="100" width="120" show-overflow-tooltip /> <el-table-column @@ -136,7 +134,7 @@ <el-table-column fixed="right" label="æä½" min-width="150" width="180" align="center" > <template #default="scope"> @@ -153,6 +151,13 @@ size="small" @click="showQRCode(scope.row)" >çæäºç»´ç </el-button > <el-button link type="primary" size="small" @click="downLoadFile(scope.row)" >éä»¶</el-button > </template> @@ -757,6 +762,7 @@ </div> </template> </el-dialog> <FileList ref="fileListRef" /> </div> </template> @@ -767,6 +773,7 @@ import { Search } from "@element-plus/icons-vue"; import { ElMessageBox } from "element-plus"; import { userListNoPage } from "@/api/system/user.js"; import FileList from "./fileList.vue"; import { getSalesLedgerWithProducts, addOrUpdateSalesLedgerProduct, @@ -1384,6 +1391,11 @@ } }; const fileListRef = ref(null) const downLoadFile = (row) => { fileListRef.value.open(row.salesLedgerFiles) } // æ¾ç¤ºäºç»´ç const showQRCode = async (row) => { try { src/views/productionManagement/productionReporting/index.vue
@@ -199,6 +199,10 @@ prop: "schedulingUserName", }, { label: "产线", prop: "productionLine", }, { label: "ååå·", prop: "salesContractNo", width: 200, src/views/reportAnalysis/projectProfit/index.vue
@@ -64,11 +64,11 @@ align: "center", prop: "customerName", }, { label: "项ç®åç§°", align: "center", prop: "projectName", }, // { // label: "项ç®åç§°", // align: "center", // prop: "projectName", // }, { label: "ååéé¢", align: "center",