| src/components/ProcessParamListDialog.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/financialManagement/assets/fixedAssets.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/financialManagement/assets/intangibleAssets.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/financialManagement/generalLedger/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/financialManagement/voucher/detailLedger.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/financialManagement/voucher/generalLedger.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/financialManagement/voucher/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/productionManagement/productionProcess/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/components/ProcessParamListDialog.vue
@@ -130,6 +130,7 @@ </el-form-item> <el-form-item label="标准值"> <el-input v-model="selectedParam.standardValue" @input="val => onStandardValueInput(val, selectedParam)" placeholder="请输入默认值" /> </el-form-item> <el-form-item label="是否必填"> @@ -144,7 +145,8 @@ </div> </div> <template #footer> <el-button type="primary" @click="handleParamSelectSubmit">确定</el-button> <el-button type="primary" @click="handleParamSelectSubmit">确定</el-button> <el-button @click="selectParamDialogVisible = false">取消</el-button> </template> </el-dialog> @@ -174,11 +176,13 @@ <el-form-item label="标准值" prop="standardValue"> <el-input v-model="editParamForm.standardValue" @input="val => onStandardValueInput(val, editParamForm)" placeholder="请输入标准值" /> </el-form-item> </el-form> <template #footer> <el-button type="primary" @click="handleEditParamSubmit">确定</el-button> <el-button type="primary" @click="handleEditParamSubmit">确定</el-button> <el-button @click="editParamDialogVisible = false">取消</el-button> </template> </el-dialog> @@ -266,8 +270,32 @@ paramFormat: "", unit: "", }); const onStandardValueInput = (val, target) => { const data = target.value || target; const type = data.paramType || data.parameterType; if (type === 1) { // 数值格式:不能输入中文或英文字符 data.standardValue = val.replace(/[a-zA-Z\u4e00-\u9fa5]/g, ""); } }; const editParamRules = ref({ // standardValue: [{ required: true, message: "请输入标准值", trigger: "blur" }], standardValue: [ { validator: (rule, value, callback) => { const type = editParamForm.value.paramType || editParamForm.value.parameterType; if (type === 1 && value) { if (/[a-zA-Z\u4e00-\u9fa5]/.test(value)) { return callback(new Error("数值格式不能包含中英文字符")); } } callback(); }, trigger: "blur", }, ], }); const editParamFormRef = ref(null); src/views/financialManagement/assets/fixedAssets.vue
@@ -38,7 +38,7 @@ <div> <el-button type="primary" @click="add" icon="Plus">新增资产</el-button> <el-button type="warning" @click="handleDepreciation" icon="Money">折旧计提</el-button> <el-button @click="handleOut" icon="Download">导出</el-button> <!-- <el-button @click="handleOut" icon="Download">导出</el-button> --> </div> </div> <PIMTable src/views/financialManagement/assets/intangibleAssets.vue
@@ -39,7 +39,7 @@ <div> <el-button type="primary" @click="add" icon="Plus">新增资产</el-button> <el-button type="warning" @click="handleAmortization" icon="Money">摊销计提</el-button> <el-button @click="handleOut" icon="Download">导出</el-button> <!-- <el-button @click="handleOut" icon="Download">导出</el-button> --> </div> </div> <PIMTable src/views/financialManagement/generalLedger/index.vue
@@ -44,8 +44,8 @@ <el-button type="primary" @click="add" icon="Plus">新增</el-button> <el-button @click="handleOut" icon="Download">导出</el-button> <!-- <el-button @click="handleOut" icon="Download">导出</el-button> --> </div> </div> <el-table ref="tableRef" src/views/financialManagement/voucher/detailLedger.vue
@@ -32,7 +32,7 @@ <el-form-item> <el-button type="primary" @click="getTableData">查询</el-button> <el-button @click="resetFilters">重置</el-button> <el-button @click="handlePrint" icon="Printer">打印</el-button> <!-- <el-button @click="handlePrint" icon="Printer">打印</el-button>--> <el-button @click="handleOut" icon="Download">导出</el-button> </el-form-item> </el-form> src/views/financialManagement/voucher/generalLedger.vue
@@ -32,34 +32,34 @@ <el-form-item> <el-button type="primary" @click="getTableData">查询</el-button> <el-button @click="resetFilters">重置</el-button> <el-button @click="handlePrint" icon="Printer">打印</el-button> <el-button @click="handleOut" icon="Download">导出</el-button> <!-- <el-button @click="handlePrint" icon="Printer">打印</el-button>--> <!-- <el-button @click="handleOut" icon="Download">导出</el-button> --> </el-form-item> </el-form> <div class="table_list"> <el-table :data="dataList" border style="width: 100%"> <el-table-column prop="date" label="日期" width="120" /> <el-table-column prop="voucherNo" label="凭证字号" width="120" /> <el-table-column prop="summary" label="摘要" min-width="200" show-overflow-tooltip /> <el-table-column prop="debit" label="借方" width="150"> <el-table-column prop="date" label="日期"/> <!-- <el-table-column prop="voucherNo" label="凭证字号" width="120" /> --> <!-- <el-table-column prop="summary" label="摘要" min-width="200" show-overflow-tooltip /> --> <el-table-column prop="debit" label="借方"> <template #default="{ row }"> <span v-if="row.debit > 0" class="text-danger">¥{{ formatMoney(row.debit) }}</span> <span v-else>-</span> </template> </el-table-column> <el-table-column prop="credit" label="贷方" width="150"> <el-table-column prop="credit" label="贷方"> <template #default="{ row }"> <span v-if="row.credit > 0" class="text-success">¥{{ formatMoney(row.credit) }}</span> <span v-else>-</span> </template> </el-table-column> <el-table-column label="方向" width="80"> <el-table-column label="方向"> <template #default="{ row }"> <el-tag :type="row.direction === '借' ? 'success' : 'danger'" size="small">{{ row.direction }}</el-tag> </template> </el-table-column> <el-table-column label="余额" width="150"> <el-table-column label="余额"> <template #default="{ row }"> <span :class="row.balance >= 0 ? 'text-primary' : 'text-warning'">¥{{ formatMoney(Math.abs(row.balance)) }}</span> </template> src/views/financialManagement/voucher/index.vue
@@ -32,13 +32,13 @@ <div class="table_list"> <div class="actions"> <div> <el-statistic title="借方合计" :value="totalDebit" precision="2" prefix="¥" /> <el-statistic title="贷方合计" :value="totalCredit" precision="2" prefix="¥" style="margin-left: 30px;" /> <el-statistic title="借方合计" :value="totalDebit" :precision="2" prefix="¥" /> <el-statistic title="贷方合计" :value="totalCredit" :precision="2" prefix="¥" style="margin-left: 30px;" /> </div> <div> <el-button type="primary" @click="add" icon="Plus">新增凭证</el-button> <el-button @click="handleImport" icon="Upload">导入</el-button> <el-button @click="handleOut" icon="Download">导出</el-button> <!-- <el-button @click="handleImport" icon="Upload">导入</el-button> --> <!-- <el-button @click="handleOut" icon="Download">导出</el-button> --> </div> </div> <PIMTable @@ -84,6 +84,11 @@ <span class="label">凭证字:</span> <el-select v-model="form.voucherPrefix" :disabled="isViewMode" style="width: 70px;"> <el-option label="记" value="记" /> <el-option label="现" value="现" /> <el-option label="银" value="银" /> <el-option label="转" value="转" /> <el-option label="收" value="收" /> <el-option label="付" value="付" /> </el-select> <el-input v-model="form.voucherNum" :disabled="isViewMode" style="width: 60px;" /> <span class="label" style="margin-left: 5px;">号</span> @@ -96,7 +101,6 @@ <span class="label">附件:</span> <el-input-number v-model="form.attachmentCount" :disabled="isViewMode" :min="0" :controls="false" style="width: 60px;" /> <span class="label" style="margin-left: 5px;">张</span> <el-button type="primary" link :disabled="isViewMode" style="margin-left: 10px;">上传文件</el-button> </div> </div> <div class="voucher-table"> @@ -153,12 +157,12 @@ @change="(val) => handleSubjectChange(val, rowIndex)" @focus="selectRow(rowIndex)" /> <div class="subject-name">{{ entry.subjectName }}</div> <!-- <div class="subject-name">{{ entry.subjectName }}</div> --> </td> <!-- 借方11列 --> <template v-if="editingCell.row === rowIndex && editingCell.type === 'debit'"> <td colspan="11" class="debit-input-cell"> <el-input-number ref="amountInputRef" v-model="entry.debit" :disabled="isViewMode" :min="0" :precision="2" :controls="false" size="small" @blur="finishEdit" class="full-width-input" /> <el-input-number ref="amountInputRef" v-model="entry.debit" :disabled="isViewMode" :min="0" :precision="2" :controls="false" :value-on-clear="undefined" size="small" @blur="finishEdit" class="full-width-input" /> </td> </template> <template v-else> @@ -169,7 +173,7 @@ <!-- 贷方11列 --> <template v-if="editingCell.row === rowIndex && editingCell.type === 'credit'"> <td colspan="11" class="credit-input-cell"> <el-input-number ref="amountInputRef" v-model="entry.credit" :disabled="isViewMode" :min="0" :precision="2" :controls="false" size="small" @blur="finishEdit" class="full-width-input" /> <el-input-number ref="amountInputRef" v-model="entry.credit" :disabled="isViewMode" :min="0" :precision="2" :controls="false" :value-on-clear="undefined" size="small" @blur="finishEdit" class="full-width-input" /> </td> </template> <template v-else> @@ -217,7 +221,36 @@ </el-select> </div> </div> <!-- 编辑模式:使用 AttachmentUploadFile 上传组件 --> <div class="voucher-attachment-upload" v-if="!isViewMode"> <div class="attachment-label">附件上传:</div> <AttachmentUploadFile v-model:fileList="form.attachments" :disabled="isViewMode" :limit="10" :fileSize="50" buttonText="点击上传附件" @change="handleAttachmentChange" /> </div> </el-form> <!-- 查看模式:展示附件列表(放在 el-form 外面,避免被 disabled) --> <div class="voucher-attachment-upload" v-if="isViewMode && form.attachments?.length"> <div class="attachment-label">附件列表:</div> <el-table :data="form.attachments" border class="attachment-table"> <el-table-column label="附件名称" show-overflow-tooltip> <template #default="scope"> {{ scope.row.originalFilename || scope.row.name || scope.row.fileName || '未命名文件' }} </template> </el-table-column> <el-table-column fixed="right" label="操作" width="150" align="center"> <template #default="scope"> <el-button link type="primary" size="small" @click="previewFile(scope.row)">预览</el-button> <el-button link type="primary" size="small" @click="downloadFile(scope.row)">下载</el-button> </template> </el-table-column> </el-table> </div> </div> <template #footer> <div> @@ -226,6 +259,8 @@ </div> </template> </FormDialog> <!-- 文件预览组件 --> <FilePreview ref="filePreviewRef" /> </div> </template> @@ -233,6 +268,10 @@ import { ref, reactive, onMounted, computed, nextTick } from "vue"; import { ElMessage, ElMessageBox } from "element-plus"; import FormDialog from "@/components/Dialog/FormDialog.vue"; import AttachmentUploadFile from "@/components/AttachmentUpload/file/index.vue"; import FileList from "@/components/Dialog/FileList.vue"; import FilePreview from "@/components/filePreview/index.vue"; import download from "@/plugins/download.js"; import useUserStore from "@/store/modules/user"; import { userListNoPageByTenantId } from "@/api/system/user"; import { listAccountSubject } from "@/api/financialManagement/accountSubject"; @@ -284,6 +323,7 @@ const isEdit = ref(false); const currentId = ref(null); const isViewMode = computed(() => dialogMode.value === "view"); const filePreviewRef = ref(null); const fallbackSubjectTree = [ { subjectCode: "1001", subjectName: "库存现金", balanceDirection: "借方", children: [] }, @@ -326,8 +366,8 @@ subjectName: "", balanceDirection: "", summary: "", debit: 0, credit: 0, debit: undefined, credit: undefined, }); const createDefaultForm = () => ({ @@ -336,6 +376,7 @@ voucherNum: "", voucherDate: "", attachmentCount: 0, attachments: [], entries: [createEmptyEntry(), createEmptyEntry()], creator: getDefaultCreator(), remark: "", @@ -490,6 +531,31 @@ form.entries.push(createEmptyEntry()); }; const handleAttachmentChange = (fileList) => { form.attachmentCount = fileList?.length || 0; }; // 使用项目封装的 filePreview 组件预览文件 const previewFile = (row) => { const url = row.previewURL || row.previewUrl || row.url; if (url && filePreviewRef.value) { filePreviewRef.value.open(url); } else { ElMessage.warning('文件地址无效,无法预览'); } }; // 使用项目封装的 download 插件下载文件 const downloadFile = (row) => { const url = row.downloadURL || row.downloadUrl || row.url; if (url) { const filename = row.originalFilename || row.name || row.fileName || 'download'; download.byUrl(url, filename); } else { ElMessage.warning('文件地址无效,无法下载'); } }; const selectRow = (index) => { selectedRowIndex.value = index; }; @@ -589,10 +655,13 @@ const { data } = await getVoucherDetail(row.id); const detail = data || row; const parts = (detail.voucherNo || "").split("-"); Object.assign(form, createDefaultForm(), detail, { const attachments = detail.storageBlobVOList || detail.storageBlobDTOs || detail.attachments || []; Object.assign(form, createDefaultForm(), { ...detail, voucherPrefix: parts[0] || "记", voucherNum: parts[1] || "", creator: detail.creator || getDefaultCreator(), attachments, entries: detail.entries?.map(item => ({ subjectCode: item.subjectCode || "", @@ -696,6 +765,7 @@ remark: form.remark, debit: totalDebitEntry.value, credit: totalCreditEntry.value, storageBlobDTOs: form.attachments || [], entries: validEntries.map(entry => ({ subjectCode: entry.subjectCode, subjectName: entry.subjectName, @@ -801,6 +871,21 @@ } } .voucher-attachment-upload { margin-top: 15px; padding: 0 10px; .attachment-label { font-size: 14px; color: #606266; margin-bottom: 10px; } .attachment-table { border-radius: 4px; } } .voucher-table { border: 1px solid #dcdfe6; border-right: none; src/views/productionManagement/productionProcess/index.vue
@@ -243,6 +243,7 @@ </el-form-item> <el-form-item label="标准值"> <el-input v-model="selectedParam.standardValue" @input="val => onStandardValueInput(val, selectedParam)" placeholder="请输入默认值" /> </el-form-item> </el-form> @@ -273,6 +274,7 @@ <el-form-item label="标准值" prop="standardValue"> <el-input v-model="editParamForm.standardValue" @input="val => onStandardValueInput(val, editParamForm)" placeholder="请输入标准值" /> </el-form-item> </el-form> @@ -392,7 +394,18 @@ technologyParamId: null, paramName: "", standardValue: null, paramType: null, }); const onStandardValueInput = (val, target) => { const data = target.value || target; const type = data.paramType; if (type === 1) { // 数值格式:不能输入中文或英文字符 data.standardValue = val.replace(/[a-zA-Z\u4e00-\u9fa5]/g, ""); } }; const editParamRules = { standardValue: [ { @@ -403,6 +416,12 @@ if (value === null || value === undefined || value === "") { callback(new Error("请输入标准值")); } else { const type = editParamForm.paramType; if (type === 1 && value) { if (/[a-zA-Z\u4e00-\u9fa5]/.test(value)) { return callback(new Error("数值格式不能包含中英文字符")); } } callback(); } }, @@ -717,6 +736,7 @@ editParamForm.technologyParamId = row.technologyParamId; editParamForm.paramName = row.paramName; editParamForm.standardValue = row.standardValue; editParamForm.paramType = row.paramType; editParamDialogVisible.value = true; };