| | |
| | | params: query |
| | | }) |
| | | } |
| | | // æ¥è¯¢ç
¤ç§ |
| | | // å é¤éå®åºåº |
| | | export function delSalesRecord(query) { |
| | | return request({ |
| | | url: '/salesRecord/delSalesRecord', |
| | |
| | | v-loading="loading" |
| | | :data="tableData" |
| | | :border="border" |
| | | :show-selection="showSelection" |
| | | :show-selection="showSelection" |
| | | :max-height="maxHeight" |
| | | :header-cell-style="{ background: '#EBEEF5', color: '#3D3D3D' }" |
| | | @selection-change="handleSelectionChange" |
| | |
| | | :show-overflow-tooltip="showOverflowTooltip" |
| | | ref="tableRef" |
| | | :row-key="rowKey" |
| | | style="width: 100%" |
| | | style="width: 100%;" |
| | | > |
| | | <el-table-column v-if="showSelection" type="selection" width="55" align="center" /> |
| | | <el-table-column v-if="showIndex" label="åºå·" width="60" align="center" fixed="left"> |
| | |
| | | </el-table-column> |
| | | </template> |
| | | <!-- æä½å --> |
| | | <el-table-column v-if="showOperations" :label="operationsLabel" :width="operationsWidth" fixed="right" align="center"> |
| | | <el-table-column v-if="showOperations" :label="operationsLabel" :width="operationsWidth" :show-overflow-tooltip="false" fixed="right" align="center"> |
| | | <template #default="scope"> |
| | | <slot name="operations" :row="scope.row"> |
| | | <el-button v-if="operations.includes('edit')" link type="primary" size="small" |
| | | @click="handleEdit(scope.row)">ç¼è¾</el-button> |
| | | <el-button v-if="operations.includes('viewFile')" link type="primary" size="small" |
| | | <el-button v-if="operations.includes('viewRow')" link type="primary" size="small" |
| | | @click="handleView(scope.row)">æ¥çéä»¶</el-button> |
| | | <!-- <el-button--> |
| | | <!-- v-if="operations.includes('delete')"--> |
| | | <!-- link--> |
| | | <!-- type="danger"--> |
| | | <!-- size="small"--> |
| | | <!-- @click="handleDelete(scope.row)"--> |
| | | <!-- >å é¤</el-button>--> |
| | | </slot> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | }; |
| | | |
| | | // å¤çéæ©ååãç¼è¾ãå é¤åå¯¼åºæä½ |
| | | const emit = defineEmits(['selection-change', 'edit', 'delete', 'export']) |
| | | const emit = defineEmits(['selection-change', 'edit', 'delete', 'export', 'viewRow']) |
| | | const handleSelectionChange = (selection) => { |
| | | emit('selection-change', selection) |
| | | } |
| | |
| | | emit('edit', row) |
| | | } |
| | | const handleView = (row) => { |
| | | emit('viewFile', row) |
| | | emit('viewRow', row) |
| | | } |
| | | const handleDelete = (row) => { |
| | | ElMessageBox.confirm( |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <el-dialog v-model="descriptionsVisible" :title="title" width="60%" :close-on-click-modal="false"> |
| | | <el-card> |
| | | <el-descriptions |
| | | class="margin-top" |
| | | :title="descriptionsTitle" |
| | | :column="column" |
| | | :size="size" |
| | | :border="border" |
| | | > |
| | | <template v-if="showOperations" #extra> |
| | | <slot name="extra"> |
| | | <el-button type="primary" @click="handleEdit" v-if="!isViewOnly">ç¼è¾</el-button> |
| | | </slot> |
| | | </template> <!-- å¨ææ¸²ææææ°æ®é¡¹ --> |
| | | <el-descriptions-item |
| | | v-for="(item, key) in filteredData" |
| | | :key="`desc-item-${key}`" |
| | | :label="getFieldLabel(key)" |
| | | :span="getFieldSpan(key)" |
| | | > |
| | | {{ formatValue(item, key) }} |
| | | </el-descriptions-item> |
| | | </el-descriptions> |
| | | </el-card> |
| | | |
| | | <template #footer> |
| | | <div class="dialog-footer"> |
| | | <el-button @click="handleClose">å
³é</el-button> |
| | | <el-button v-if="!isViewOnly" type="primary" @click="handleEdit">ç¼è¾</el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { defineProps, computed } from "vue"; |
| | | |
| | | const props = defineProps({ |
| | | // å¼¹çªæ é¢ |
| | | title: { |
| | | type: String, |
| | | default: "详æ
ä¿¡æ¯" |
| | | }, |
| | | // æ°æ®å¯¹è±¡ |
| | | formData: { |
| | | type: Object, |
| | | default: () => ({}) |
| | | }, |
| | | // æ¯å¦ä¸ºæ¥çæ¨¡å¼ |
| | | isViewOnly: { |
| | | type: Boolean, |
| | | default: true |
| | | }, |
| | | // æè¿°ç»ä»¶æ é¢ |
| | | descriptionsTitle: { |
| | | type: String, |
| | | default: "" |
| | | }, |
| | | // åæ° |
| | | column: { |
| | | type: Number, |
| | | default: 2 |
| | | }, |
| | | // 尺寸 |
| | | size: { |
| | | type: String, |
| | | default: "default", |
| | | validator: (value) => ["large", "default", "small"].includes(value) |
| | | }, |
| | | // æ¯å¦æ¾ç¤ºè¾¹æ¡ |
| | | border: { |
| | | type: Boolean, |
| | | default: true |
| | | }, |
| | | // æ¯å¦æ¾ç¤ºæä½æé® |
| | | showOperations: { |
| | | type: Boolean, |
| | | default: true |
| | | }, |
| | | // åæ®µæ å°é
ç½® { key: { label: 'æ¾ç¤ºåç§°', span?: è·¨åæ°, formatter?: æ ¼å¼å彿° } } |
| | | fieldConfig: { |
| | | type: Object, |
| | | default: () => ({}) |
| | | }, |
| | | // éè¦æé¤æ¾ç¤ºçåæ®µ |
| | | excludeFields: { |
| | | type: Array, |
| | | default: () => ['id', 'createTime', 'updateTime', 'deleted'] |
| | | }, // éè¦å
嫿¾ç¤ºçåæ®µï¼å¦æè®¾ç½®äºï¼ååªæ¾ç¤ºè¿äºåæ®µï¼ |
| | | includeFields: { |
| | | type: Array, |
| | | default: () => [] |
| | | }, |
| | | // åæ®µæ ç¾æ å°è¡¨ { key: 'æ¾ç¤ºåç§°' } |
| | | fieldLabels: { |
| | | type: Object, |
| | | default: () => ({}) |
| | | }, |
| | | // åæ®µæ¾ç¤ºé¡ºåº |
| | | fieldOrder: { |
| | | type: Array, |
| | | default: () => [] |
| | | } |
| | | }); |
| | | |
| | | const descriptionsVisible = defineModel("descriptionsVisible", { |
| | | type: Boolean, |
| | | default: false, |
| | | }); |
| | | |
| | | const emit = defineEmits(["update:descriptionsVisible", "edit", "close"]); |
| | | |
| | | // è¿æ»¤åçæ°æ® |
| | | const filteredData = computed(() => { |
| | | if (!props.formData || typeof props.formData !== 'object') { |
| | | return {}; |
| | | } |
| | | |
| | | const data = { ...props.formData }; |
| | | let filteredResult = {}; |
| | | |
| | | // 妿æå®äºå
å«å段ï¼ååªæ¾ç¤ºè¿äºå段 |
| | | if (props.includeFields.length > 0) { |
| | | props.includeFields.forEach(field => { |
| | | if (data.hasOwnProperty(field)) { |
| | | filteredResult[field] = data[field]; |
| | | } |
| | | }); |
| | | } else { |
| | | // å¦åæé¤æå®å段 |
| | | Object.keys(data).forEach(key => { |
| | | if (!props.excludeFields.includes(key)) { |
| | | filteredResult[key] = data[key]; |
| | | } |
| | | }); |
| | | } |
| | | |
| | | // 妿æå®äºå段顺åºï¼åæé¡ºåºéæ°ç»ç»æ°æ® |
| | | if (props.fieldOrder.length > 0) { |
| | | const orderedResult = {}; |
| | | |
| | | // å
ææå®é¡ºåºæ·»å åæ®µ |
| | | props.fieldOrder.forEach(field => { |
| | | if (filteredResult.hasOwnProperty(field)) { |
| | | orderedResult[field] = filteredResult[field]; |
| | | } |
| | | }); |
| | | |
| | | // åæ·»å æªå¨é¡ºåºä¸æå®çå
¶ä»å段 |
| | | Object.keys(filteredResult).forEach(key => { |
| | | if (!props.fieldOrder.includes(key)) { |
| | | orderedResult[key] = filteredResult[key]; |
| | | } |
| | | }); |
| | | |
| | | return orderedResult; |
| | | } |
| | | |
| | | return filteredResult; |
| | | }); |
| | | |
| | | // è·ååæ®µæ¾ç¤ºæ ç¾ |
| | | const getFieldLabel = (key) => { |
| | | // 1. ä¼å
ä½¿ç¨ fieldConfig ä¸çæ ç¾é
ç½® |
| | | if (props.fieldConfig[key]?.label) { |
| | | return props.fieldConfig[key].label; |
| | | } |
| | | |
| | | // 2. å
¶æ¬¡ä½¿ç¨ä¼ å
¥çåæ®µæ å°è¡¨ |
| | | if (props.fieldLabels[key]) { |
| | | return props.fieldLabels[key]; |
| | | } |
| | | |
| | | // 3. æå使ç¨é»è®¤çåæ®µå转æ¢ï¼é©¼å³°è½¬ç©ºæ ¼ï¼ |
| | | return key.replace(/([A-Z])/g, ' $1').replace(/^./, str => str.toUpperCase()); |
| | | }; |
| | | |
| | | // è·ååæ®µè·¨åæ° |
| | | const getFieldSpan = (key) => { |
| | | return props.fieldConfig[key]?.span || 1; |
| | | }; |
| | | |
| | | // æ ¼å¼åå¼ |
| | | const formatValue = (value, key) => { |
| | | // ä¼å
使ç¨é
ç½®çæ ¼å¼å彿° |
| | | if (props.fieldConfig[key]?.formatter && typeof props.fieldConfig[key].formatter === 'function') { |
| | | return props.fieldConfig[key].formatter(value); |
| | | } |
| | | |
| | | // é»è®¤æ ¼å¼å |
| | | if (value === null || value === undefined || value === '') { |
| | | return '--'; |
| | | } |
| | | |
| | | // æ°ç»æ ¼å¼å |
| | | if (Array.isArray(value)) { |
| | | return value.join(', '); |
| | | } |
| | | |
| | | // å¯¹è±¡æ ¼å¼å |
| | | if (typeof value === 'object') { |
| | | return JSON.stringify(value); |
| | | } |
| | | |
| | | // æ¥ææ ¼å¼å |
| | | if (key.toLowerCase().includes('time') || key.toLowerCase().includes('date')) { |
| | | try { |
| | | const date = new Date(value); |
| | | if (!isNaN(date.getTime())) { |
| | | return date.toLocaleString('zh-CN'); |
| | | } |
| | | } catch (e) { |
| | | // 妿䏿¯æææ¥æï¼è¿ååå¼ |
| | | } |
| | | } |
| | | |
| | | return String(value); |
| | | }; |
| | | |
| | | // å¤çç¼è¾æé®ç¹å» |
| | | const handleEdit = () => { |
| | | emit('edit', props.formData); |
| | | }; |
| | | |
| | | // å¤çå
³é |
| | | const handleClose = () => { |
| | | descriptionsVisible.value = false; |
| | | emit('close'); |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .margin-top { |
| | | margin-top: 20px; |
| | | } |
| | | |
| | | .dialog-footer { |
| | | display: flex; |
| | | justify-content: flex-end; |
| | | gap: 12px; |
| | | } |
| | | |
| | | .cell-item { |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | :deep(.el-descriptions__label) { |
| | | font-weight: 600; |
| | | } |
| | | |
| | | :deep(.el-descriptions__content) { |
| | | word-break: break-word; |
| | | } |
| | | </style> |
| | |
| | | */ |
| | | export function parseCoalArray(coalString) { |
| | | if (!coalString) return []; |
| | | |
| | | if (Array.isArray(coalString)) return coalString; |
| | | |
| | | return String(coalString) |
| | | .replace(/^\[|\]$/g, '') |
| | | .split(',') |
| | |
| | | } |
| | | |
| | | for (let i = 0; i < data.length; i++) { |
| | | console.log(data[i]) |
| | | const item = data[i]; |
| | | for (const field of requiredFields) { |
| | | if (item[field] === '' || item[field] === null || item[field] === undefined) { |
| | |
| | | @node-click="handleNodeClick" |
| | | > |
| | | <template #default="{ node, data }"> |
| | | <div class="tree-node-content" @dblclick="headerDbClick(data)"> |
| | | <div class="tree-node-content" @dblclick="headerDbClick(node,data)"> |
| | | <div class="node-icon"> |
| | | <el-icon |
| | | v-if="!node.isLeaf" |
| | |
| | | <script setup> |
| | | import {nextTick, onMounted, reactive, ref} from "vue"; |
| | | import ETable from "@/components/Table/ETable.vue"; |
| | | import {ElButton, ElIcon, ElInput, ElMessage} from "element-plus"; |
| | | import {ElButton, ElIcon, ElInput, ElMessage, ElMessageBox} from "element-plus"; |
| | | import archiveDialog from "./mould/archiveDialog.vue"; |
| | | import Pagination from "@/components/Pagination/index.vue"; |
| | | import {Delete, Document, Folder, Plus, Search,} from "@element-plus/icons-vue"; |
| | |
| | | return data.name?.toLowerCase().includes(value.toLowerCase()); |
| | | }; |
| | | const submitForm = async (res) => { |
| | | if (res && res.code === 200) { |
| | | // å·æ°åè¡¨æ°æ® |
| | | await getArchiveListData(); |
| | | } else { |
| | | ElMessage.error("æä½å¤±è´¥: " + (res?.message || "æªç¥é误")); |
| | | try { |
| | | if (res && res.code === 200) { |
| | | ElMessage.success("æä½æå"); |
| | | dialogVisible.value = false; |
| | | // å·æ°åè¡¨æ°æ® |
| | | await getArchiveListData(); |
| | | } else { |
| | | ElMessage.error("æä½å¤±è´¥: " + (res?.message || res?.msg || "æªç¥é误")); |
| | | } |
| | | } catch (error) { |
| | | console.error("æäº¤è¡¨åé误:", error); |
| | | ElMessage.error("æä½å¤±è´¥ï¼è¯·ç¨åéè¯"); |
| | | } |
| | | } |
| | | }; |
| | | |
| | | const centerDialogVisible = (val) => { |
| | | dialogVisible.value = val; |
| | | }; |
| | | const tableSwitch = ref(false); |
| | | // å¤çèç¹ç¹å» |
| | | const handleNodeClick = (data) => { |
| | | console.log("ç¹å»èç¹", data); |
| | | tableSwitch.value = true; |
| | | // 忢èç¹æ¶éç½®å°ç¬¬ä¸é¡µ |
| | | queryParams.current = 1; |
| | |
| | | getArchiveListData(); |
| | | }; |
| | | const archiveDialogs = ref(null); // è¡¨æ ¼ç»ä»¶å¼ç¨ |
| | | // add |
| | | // æ°å¢å½æ¡£ |
| | | const add = () => { |
| | | row.value = {}; // æ¸
ç©ºè¡æ°æ®ï¼ç¡®ä¿æ¯æ°å¢æ¨¡å¼ |
| | | dialogVisible.value = true; |
| | | newName.value = ""; // æ¸
空è¾å
¥æ¡ |
| | | archiveDialogs.value.initForm(); // é置表å |
| | | try { |
| | | row.value = {}; // æ¸
ç©ºè¡æ°æ®ï¼ç¡®ä¿æ¯æ°å¢æ¨¡å¼ |
| | | newName.value = ""; // æ¸
空è¾å
¥æ¡ |
| | | dialogVisible.value = true; |
| | | |
| | | // ç¡®ä¿ç»ä»¶å¼ç¨åå¨ååè°ç¨æ¹æ³ |
| | | nextTick(() => { |
| | | if (archiveDialogs.value && typeof archiveDialogs.value.initForm === 'function') { |
| | | archiveDialogs.value.initForm(); // é置表å |
| | | } |
| | | }); |
| | | } catch (error) { |
| | | console.error("æ°å¢å½æ¡£é误:", error); |
| | | ElMessage.error("æå¼æ°å¢çé¢å¤±è´¥"); |
| | | } |
| | | }; |
| | | // å¤çå页åå |
| | | const handlePageChange = ({page}) => { |
| | | queryParams.current = page; |
| | | // pageSize åºå®ä¸º20ï¼ä¸åä»åæ°ä¸è·å |
| | | getArchiveListData(); |
| | | const handlePageChange = (pagination) => { |
| | | try { |
| | | const { page, limit } = pagination; |
| | | queryParams.current = page; |
| | | if (limit) { |
| | | queryParams.pageSize = limit; |
| | | } |
| | | getArchiveListData(); |
| | | } catch (error) { |
| | | console.error("å页å¤çé误:", error); |
| | | ElMessage.error("å页æä½å¤±è´¥"); |
| | | } |
| | | }; |
| | | |
| | | const getArchiveListData = async () => { |
| | |
| | | loading.value = false; |
| | | } |
| | | }; |
| | | // å é¤éä¸ç彿¡£è®°å½ |
| | | const delHandler = async () => { |
| | | if (selectedRows.length === 0) { |
| | | ElMessage.warning("è¯·éæ©è¦å é¤çæ°æ®"); |
| | | return; |
| | | } |
| | | |
| | | try { |
| | | await ElMessageBox.confirm( |
| | | `ç¡®å®è¦å é¤éä¸ç ${selectedRows.length} æ¡è®°å½åï¼`, |
| | | 'å é¤ç¡®è®¤', |
| | | { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | |
| | | const ids = selectedRows.map((row) => row.id); |
| | | const {code, msg} = await delArchive(ids); |
| | | const { code, msg } = await delArchive(ids); |
| | | |
| | | if (code !== 200) { |
| | | ElMessage.warning("å é¤å¤±è´¥: " + msg); |
| | | } else { |
| | | ElMessage.success("å 餿å"); |
| | | // å 餿ååéæ°è·åæ°æ® |
| | | await getArchiveListData(); |
| | | ElMessage.error("å é¤å¤±è´¥: " + msg); |
| | | return; |
| | | } |
| | | |
| | | ElMessage.success("å 餿å"); |
| | | // å 餿ååéæ°è·åæ°æ® |
| | | await getArchiveListData(); |
| | | // æ¸
空éä¸ç¶æ |
| | | selectedRows.splice(0, selectedRows.length); |
| | | |
| | | } catch (error) { |
| | | ElMessage.error("å é¤å½æ¡£å¤±è´¥"); |
| | | if (error !== 'cancel') { |
| | | console.error("å é¤å½æ¡£å¤±è´¥:", error); |
| | | ElMessage.error("å 餿ä½å¤±è´¥ï¼è¯·ç¨åéè¯"); |
| | | } |
| | | } |
| | | }; |
| | | // åå»ç¼è¾èç¹ |
| | | const headerDbClick = (comeTreeData) => { |
| | | comeTreeData.isEdit = true; |
| | | newName.value = comeTreeData.name; |
| | | const headerDbClick = (node, data) => { |
| | | data.isEdit = true; |
| | | newName.value = data.name; |
| | | nextTick(() => { |
| | | const inputEl = inputRefs.value.get(comeTreeData.id || comeTreeData); |
| | | const inputEl = inputRefs.value.get(data.id || data); |
| | | if (inputEl) { |
| | | inputEl.focus(); |
| | | inputEl.select(); |
| | |
| | | |
| | | // å¤çè¾å
¥æ¡å¤±ç¦ |
| | | const handleInputBlur = async (event, comeTreeData, node) => { |
| | | if (!comeTreeData.isEdit) return; // 妿䏿¯ç¼è¾ç¶æï¼ç´æ¥è¿å |
| | | console.log("handleInputBlur", event, comeTreeData, node); |
| | | if (event.relatedTarget && event.relatedTarget.tagName === "BUTTON") { |
| | | return; |
| | | } |
| | | comeTreeData.isEdit = false; |
| | | const newValue = newName.value.trim(); |
| | | if (comeTreeData.name === newValue) { |
| | | return; |
| | | } |
| | | if (newValue === "") { |
| | | newName.value = comeTreeData.name || "æ°èç¹"; |
| | | return; |
| | | } |
| | | try { |
| | | comeTreeData.name = newValue; |
| | | if (!comeTreeData.isEdit) return; // 妿䏿¯ç¼è¾ç¶æï¼ç´æ¥è¿å |
| | | |
| | | if (event.relatedTarget && event.relatedTarget.tagName === "BUTTON") { |
| | | return; |
| | | } |
| | | |
| | | comeTreeData.isEdit = false; |
| | | const newValue = newName.value.trim(); |
| | | |
| | | if (comeTreeData.name === newValue) { |
| | | return; |
| | | } |
| | | |
| | | if (newValue === "") { |
| | | newName.value = comeTreeData.name || "æ°èç¹"; |
| | | ElMessage.warning("èç¹åç§°ä¸è½ä¸ºç©º"); |
| | | return; |
| | | } |
| | | |
| | | // è·åç¶èç¹çid - éè¿ node åæ°æ´åç¡®å°è·å |
| | | let parentId = null; |
| | | if (node && node.parent && node.parent.data) { |
| | | parentId = node.parent.data.id; |
| | | } |
| | | await addOrEditTree({ |
| | | |
| | | const result = await addOrEditTree({ |
| | | name: newValue, |
| | | parentId: parentId || null, // å¦ææ²¡æç¶èç¹ï¼å为 null |
| | | id: comeTreeData.id || null, |
| | | }); |
| | | if (result.code === 200) { |
| | | comeTreeData.name = newValue; |
| | | if (!comeTreeData.id && result.data) { |
| | | comeTreeData.id = result.data.id || result.data; |
| | | } |
| | | ElMessage.success("ä¿åæå"); |
| | | |
| | | // å·æ°æ æ°æ®å¹¶å±å¼å½åèç¹ |
| | | const currentNodeId = comeTreeData.id; |
| | | await getList(); |
| | | |
| | | // çå¾
DOMæ´æ°åå±å¼èç¹ |
| | | nextTick(() => { |
| | | if (currentNodeId && treeRef.value) { |
| | | const targetNode = treeRef.value.getNode(currentNodeId); |
| | | if (targetNode) { |
| | | // å±å¼å½åèç¹ |
| | | targetNode.expanded = true; |
| | | // 妿æç¶èç¹ï¼ä¹å±å¼ç¶èç¹è·¯å¾ |
| | | expandParentNodes(targetNode); |
| | | } |
| | | } |
| | | }); |
| | | } else { |
| | | comeTreeData.name = comeTreeData.name || "æ°èç¹"; |
| | | ElMessage.error("ä¿å失败: " + (result.msg || "æªç¥é误")); |
| | | } |
| | | |
| | | } catch (error) { |
| | | console.error("ä¿åèç¹å¤±è´¥:", error); |
| | | comeTreeData.name = comeTreeData.name || "æ°èç¹"; |
| | | ElMessage.error("ä¿å失败ï¼è¯·ç¨åéè¯"); |
| | | } |
| | | }; |
| | | |
| | |
| | | isLeaf: "leaf", |
| | | }; |
| | | |
| | | // å±å¼ç¶èç¹è·¯å¾ |
| | | const expandParentNodes = (node) => { |
| | | if (node && node.parent && node.parent.data) { |
| | | // éå½å±å¼ææç¶èç¹ |
| | | node.parent.expanded = true; |
| | | expandParentNodes(node.parent); |
| | | } |
| | | }; |
| | | |
| | | // å 餿 èç¹ |
| | | const remove = async (node, data) => { |
| | | if (!data || !data.id) { |
| | | ElMessage.warning("æ æ³å 餿¤èç¹"); |
| | | return; |
| | | } |
| | | let {code, msg} = await delTree([data.id]); |
| | | if (code !== 200) { |
| | | ElMessage.warning("å é¤å¤±è´¥, " + msg); |
| | | } else { |
| | | |
| | | try { |
| | | await ElMessageBox.confirm( |
| | | `ç¡®å®è¦å é¤èç¹ "${data.name}" åï¼`, |
| | | 'å é¤ç¡®è®¤', |
| | | { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | |
| | | const { code, msg } = await delTree([data.id]); |
| | | |
| | | if (code !== 200) { |
| | | ElMessage.error("å é¤å¤±è´¥: " + msg); |
| | | return; |
| | | } |
| | | |
| | | ElMessage.success("å 餿å"); |
| | | await getList(); |
| | | |
| | | } catch (error) { |
| | | if (error !== 'cancel') { |
| | | console.error("å é¤èç¹å¤±è´¥:", error); |
| | | ElMessage.error("å é¤å¤±è´¥ï¼è¯·ç¨åéè¯"); |
| | | } |
| | | } |
| | | await getList(); |
| | | }; |
| | | |
| | | const append = async (data) => { |
| | | if (data === "") { |
| | | // æ°å¢æ ¹èç¹ |
| | | const newNode = { |
| | | id: Date.now(), |
| | | name: "æ°èç¹", |
| | | isEdit: true, |
| | | }; |
| | |
| | | } |
| | | }); |
| | | } else { |
| | | const hasChildren = data.children && data.children.length > 0; |
| | | const hasChildren = data.children; |
| | | const nodeKey = data.id || data; |
| | | const node = treeRef.value?.getNode(nodeKey); |
| | | const isExpanded = node?.expanded; // 妿æåçº§ä¸æªå±å¼ï¼å
å±å¼èç¹ |
| | |
| | | } |
| | | } |
| | | const newNode = { |
| | | id: Date.now(), |
| | | name: "æ°åèç¹", |
| | | isEdit: true, |
| | | }; |
| | |
| | | } |
| | | }; |
| | | |
| | | // ç¼è¾å½æ¡£ |
| | | const handleEdit = (rows) => { |
| | | row.value = rows; |
| | | dialogVisible.value = true; |
| | | archiveDialogs.value.editForm(rows); // è°ç¨ç¼è¾æ¹æ³ |
| | | try { |
| | | row.value = { ...rows }; // ä½¿ç¨æ·±æ·è´é¿å
å¼ç¨é®é¢ |
| | | dialogVisible.value = true; |
| | | |
| | | // ç¡®ä¿ç»ä»¶å¼ç¨åå¨ååè°ç¨æ¹æ³ |
| | | nextTick(() => { |
| | | if (archiveDialogs.value && typeof archiveDialogs.value.editForm === 'function') { |
| | | archiveDialogs.value.editForm(rows); // è°ç¨ç¼è¾æ¹æ³ |
| | | } |
| | | }); |
| | | } catch (error) { |
| | | console.error("ç¼è¾å½æ¡£é误:", error); |
| | | ElMessage.error("æå¼ç¼è¾çé¢å¤±è´¥"); |
| | | } |
| | | }; |
| | | |
| | | // ç§»é¤æå è½½ï¼ç´æ¥è·åæ°æ® |
| | |
| | | }; |
| | | // åå§åè¡¨åæ°æ®çè¾
å©å½æ° |
| | | const initFormData = (rowData) => { |
| | | console.log("rowData", rowData); |
| | | if (rowData && rowData.id) { |
| | | return copyFormData(rowData); |
| | | } |
| | |
| | | type: [{required: true, message: "è¯·éæ©ææ¡£ç±»å", trigger: "blur"}], |
| | | status: [{required: true, message: "è¯·éæ©ææ¡£ç¶æ", trigger: "blur"}], |
| | | }; |
| | | const initTreeDataId = ref(null); |
| | | const fileUploadRef = ref(null); |
| | | const initForm = () => { |
| | | const initForm = (val) => { |
| | | initTreeDataId.value = val.value.id || null; // ç¡®ä¿ initTreeDataId åå§å为 null |
| | | ruleForm.value = {}; |
| | | ruleForm.value.treeId = val.value.id || null; // ç¡®ä¿ treeId åå§å为 null |
| | | nextTick(() => { |
| | | fileUploadRef.value.init(); |
| | | }); |
| | |
| | | // åé emit äºä»¶ |
| | | |
| | | // å
³éå¯¹è¯æ¡ |
| | | ElMessage.success("æä½æå"); |
| | | centerDialogVisible.value = false; |
| | | } catch (error) { |
| | | ElMessage({ |
| | |
| | | <template> |
| | | <div> |
| | | <div class="app-container"> |
| | | <el-form :inline="true" :model="queryParams" class="search-form"> |
| | | <el-form-item v-if="shouldShowSearch" label="æç´¢"> |
| | | <el-input v-model="queryParams.searchAll" :placeholder="searchPlaceholder" clearable/> |
| | | <el-input |
| | | v-model="queryParams.searchAll" |
| | | :placeholder="searchPlaceholder" |
| | | clearable |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" @click="search">æ¥è¯¢</el-button> |
| | |
| | | </el-form> |
| | | <el-card> |
| | | <!-- æ ç¾é¡µ --> |
| | | <el-tabs v-model="activeTab" class="info-tabs" @tab-click="handleTabClick"> |
| | | <el-tab-pane v-for="tab in tabs" :key="tab.name" :label="tab.label" :name="tab.name"/> |
| | | <el-tabs |
| | | v-model="activeTab" |
| | | class="info-tabs" |
| | | @tab-click="handleTabClick" |
| | | > |
| | | <el-tab-pane |
| | | v-for="tab in tabs" |
| | | :key="tab.name" |
| | | :label="tab.label" |
| | | :name="tab.name" |
| | | /> |
| | | </el-tabs> |
| | | |
| | | <!-- æä½æé®åº --> |
| | | <el-row :gutter="24" class="table-toolbar"> |
| | | <el-button :icon="Plus" type="primary" @click="handleAdd">æ°å»º</el-button> |
| | | <el-button :icon="Delete" type="danger" @click="handleDelete">å é¤</el-button> |
| | | <el-button @click="jump">admins</el-button> |
| | | <el-button v-show="canExport" :icon="Download" type="info" @click="handleExport">导åº</el-button> |
| | | </el-row> <!-- è¡¨æ ¼ç»ä»¶ --> |
| | | <el-button :icon="Plus" type="primary" @click="handleAdd" |
| | | >æ°å»º</el-button |
| | | > |
| | | <el-button :icon="Delete" type="danger" @click="handleDelete" |
| | | >å é¤</el-button |
| | | > |
| | | <el-button |
| | | v-show="canExport" |
| | | :icon="Download" |
| | | type="info" |
| | | @click="handleExport" |
| | | >导åº</el-button |
| | | > |
| | | </el-row> |
| | | <!-- è¡¨æ ¼ç»ä»¶ --> |
| | | <div> |
| | | <data-table :border="true" :columns="columns" :loading="loading" |
| | | :show-selection="true" :table-data="tableData" @edit="handleEdit" @selection-change="handleSelectionChange"> |
| | | <data-table |
| | | :border="true" |
| | | :columns="columns" |
| | | :loading="loading" |
| | | style="width: 100%; height: calc(100vh - 29em)" |
| | | :show-selection="true" |
| | | :table-data="tableData" |
| | | @edit="handleEdit" |
| | | @viewRow="handleView" |
| | | @selection-change="handleSelectionChange" |
| | | :operations="['edit', 'viewRow']" |
| | | :operationsWidth="200" |
| | | :show-overflow-tooltip="false" |
| | | > |
| | | <!-- åæ®µåç§°åçèªå®ä¹ææ§½ - æ¾ç¤ºä¸ºæ ç¾ --> |
| | | <template v-if="tabName === 'coalQualityMaintenance'" #fieldIds="{ row }"> |
| | | <template v-if="typeof row.fieldIds === 'string' && row.fieldIds.includes(',')"> |
| | | <el-tag v-for="(field, index) in row.fieldIds.split(',')" :key="index" size="small" style="margin-right: 4px; margin-bottom: 2px;" |
| | | type="primary"> |
| | | <template |
| | | v-if="tabName === 'coalQualityMaintenance'" |
| | | #fieldIds="{ row }" |
| | | > |
| | | <template |
| | | v-if=" |
| | | typeof row.fieldIds === 'string' && row.fieldIds.includes(',') |
| | | " |
| | | > |
| | | <el-tag |
| | | v-for="(field, index) in row.fieldIds.split(',')" |
| | | :key="index" |
| | | size="small" |
| | | style="margin-right: 4px; margin-bottom: 2px" |
| | | type="primary" |
| | | > |
| | | {{ getFieldDisplayName(field.trim()) }} |
| | | </el-tag> |
| | | </template> |
| | | <template v-else> |
| | | <el-tag size="small" type="primary"> |
| | | {{ getFieldDisplayName(row.fieldIds) || '--' }} |
| | | {{ getFieldDisplayName(row.fieldIds) || "--" }} |
| | | </el-tag> |
| | | </template> |
| | | </template> |
| | | </data-table> |
| | | </div> |
| | | <pagination v-if="total > 0" :layout="'total, prev, pager, next, jumper'" :limit="pageSizes" :page="pageNum" :total="total" |
| | | @pagination="handPagination"/> |
| | | <Supplier v-if="tabName === 'supplier'" v-model:copyForm="copyForm" |
| | | v-model:supplierDialogFormVisible="dialogFormVisible" :addOrEdit="addOrEdit" :form="form" :title="title" |
| | | @beforeClose="handleBeforeClose" @submit="handleSubmit" |
| | | @update:dialogFormVisible="handleDialogFormVisible"/> |
| | | <Customer v-if="tabName === 'customer'" v-model:copyForm="copyForm" |
| | | v-model:customerDialogFormVisible="dialogFormVisible" :addOrEdit="addOrEdit" :form="form" :title="title" |
| | | @beforeClose="handleBeforeClose" @submit="handleSubmit"/> |
| | | <Coal v-if="tabName === 'coal'" v-model:coalDialogFormVisible="dialogFormVisible" v-model:copyForm="copyForm" |
| | | :addOrEdit="addOrEdit" :form="form" :title="title" @submit="handleSubmit"/> |
| | | <coalQualityMaintenance v-if="tabName === 'coalQualityMaintenance'" v-model:coalQualityMaintenanceDialogFormVisible="dialogFormVisible" |
| | | v-model:copyForm="copyForm" :addOrEdit="addOrEdit" |
| | | :form="form" |
| | | :title="title" @submit="handleSubmit"/> |
| | | <coalMeiZhiZiDuanWeiHu v-if="tabName === 'coalMeiZhiZiDuanWeiHu'" v-model:coalMaintenanceFieldDialogVisible="dialogFormVisible" |
| | | v-model:copyForm="copyForm" :addOrEdit="addOrEdit" :form="form" |
| | | :title="title" |
| | | @submit="handleSubmit"/> |
| | | <pagination |
| | | v-if="total > 0" |
| | | :layout="'total, prev, pager, next, jumper'" |
| | | :limit="pageSizes" |
| | | :page="pageNum" |
| | | :total="total" |
| | | @pagination="handPagination" |
| | | /> |
| | | <Supplier |
| | | v-if="tabName === 'supplier'" |
| | | v-model:copyForm="copyForm" |
| | | v-model:supplierDialogFormVisible="dialogFormVisible" |
| | | :addOrEdit="addOrEdit" |
| | | :form="form" |
| | | :title="title" |
| | | @beforeClose="handleBeforeClose" |
| | | @submit="handleSubmit" |
| | | @update:dialogFormVisible="handleDialogFormVisible" |
| | | /> |
| | | <Customer |
| | | v-if="tabName === 'customer'" |
| | | v-model:copyForm="copyForm" |
| | | v-model:customerDialogFormVisible="dialogFormVisible" |
| | | :addOrEdit="addOrEdit" |
| | | :form="form" |
| | | :title="title" |
| | | @beforeClose="handleBeforeClose" |
| | | @submit="handleSubmit" |
| | | /> |
| | | <Coal |
| | | v-if="tabName === 'coal'" |
| | | v-model:coalDialogFormVisible="dialogFormVisible" |
| | | v-model:copyForm="copyForm" |
| | | :addOrEdit="addOrEdit" |
| | | :form="form" |
| | | :title="title" |
| | | @submit="handleSubmit" |
| | | /> |
| | | <coalQualityMaintenance |
| | | v-if="tabName === 'coalQualityMaintenance'" |
| | | v-model:coalQualityMaintenanceDialogFormVisible="dialogFormVisible" |
| | | v-model:copyForm="copyForm" |
| | | :addOrEdit="addOrEdit" |
| | | :form="form" |
| | | :title="title" |
| | | @submit="handleSubmit" |
| | | /> |
| | | <coalMeiZhiZiDuanWeiHu |
| | | v-if="tabName === 'coalMeiZhiZiDuanWeiHu'" |
| | | v-model:coalMaintenanceFieldDialogVisible="dialogFormVisible" |
| | | v-model:copyForm="copyForm" |
| | | :addOrEdit="addOrEdit" |
| | | :form="form" |
| | | :title="title" |
| | | @submit="handleSubmit" |
| | | /> |
| | | </el-card> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import {computed, getCurrentInstance, onMounted, reactive, ref, nextTick} from "vue"; |
| | | import {ElMessage, ElMessageBox} from "element-plus"; |
| | | import {Delete, Download, Plus} from "@element-plus/icons-vue"; |
| | | import { |
| | | computed, |
| | | getCurrentInstance, |
| | | onMounted, |
| | | reactive, |
| | | ref, |
| | | nextTick, |
| | | } from "vue"; |
| | | import { ElMessage, ElMessageBox } from "element-plus"; |
| | | import { Delete, Download, Plus } from "@element-plus/icons-vue"; |
| | | |
| | | // ===== ç»ä»¶å¯¼å
¥ ===== |
| | | import DataTable from "@/components/Table/ETable.vue"; |
| | |
| | | import Coal from "./mould/coal.vue"; |
| | | import coalQualityMaintenance from "./mould/coalQualityMaintenance.vue"; |
| | | import coalMeiZhiZiDuanWeiHu from "./mould/coalMeiZhiZiDuanWeiHu.vue"; |
| | | import Descriptions from "@/components/dialog/Descriptions.vue"; |
| | | |
| | | // ===== API æå¡å¯¼å
¥ ===== |
| | | import {delSupply, getSupply} from "@/api/basicInformation/supplier.js"; |
| | | import {delCoalInfo, getCoalInfo} from "@/api/basicInformation/coal.js"; |
| | | import {testUserList} from "@/api/tool/publicInterface.js"; |
| | | import {getAreaOptions} from "@/api/system/area.js"; |
| | | import {delCustomer, getCustomerList} from "@/api/basicInformation/customer.js"; |
| | | import {coalField, deleteCoalField} from "@/api/basicInformation/coalFieldMaintenance.js"; |
| | | import {getCoalFieldList, getCoalPlanList} from "@/api/basicInformation/coalQualityMaintenance"; |
| | | import { delSupply, getSupply } from "@/api/basicInformation/supplier.js"; |
| | | import { delCoalInfo, getCoalInfo } from "@/api/basicInformation/coal.js"; |
| | | import { testUserList } from "@/api/tool/publicInterface.js"; |
| | | import { getAreaOptions } from "@/api/system/area.js"; |
| | | import { |
| | | delCustomer, |
| | | getCustomerList, |
| | | } from "@/api/basicInformation/customer.js"; |
| | | import { |
| | | coalField, |
| | | deleteCoalField, |
| | | } from "@/api/basicInformation/coalFieldMaintenance.js"; |
| | | import { |
| | | getCoalFieldList, |
| | | getCoalPlanList, |
| | | } from "@/api/basicInformation/coalQualityMaintenance"; |
| | | |
| | | const {proxy} = getCurrentInstance(); |
| | | import router from "@/router"; |
| | | const { proxy } = getCurrentInstance(); |
| | | |
| | | // ===== ååºå¼ç¶æç®¡ç ===== |
| | | const jump = () => { |
| | | }; |
| | | // å¼¹çªæ§å¶ç¶æ |
| | | const showDialog = ref(false); |
| | | const currentViewData = ref({}); // å½åæ¥ççæ°æ® |
| | | |
| | | |
| | | const dialogFormVisible = ref(false); |
| | | const form = ref({}); |
| | | const title = ref(""); |
| | |
| | | |
| | | // æ ç¾é¡µé
ç½® |
| | | const tabs = reactive([ |
| | | {name: "supplier", label: "ä¾åºåä¿¡æ¯"}, |
| | | {name: "customer", label: "客æ·ä¿¡æ¯"}, |
| | | {name: "coal", label: "ç
¤ç§ä¿¡æ¯"}, |
| | | {name: "coalQualityMaintenance", label: "ç
¤è´¨æ¹æ¡"}, |
| | | {name: "coalMeiZhiZiDuanWeiHu", label: "ç
¤è´¨å段"} |
| | | { name: "supplier", label: "ä¾åºåä¿¡æ¯" }, |
| | | { name: "customer", label: "客æ·ä¿¡æ¯" }, |
| | | { name: "coal", label: "ç
¤ç§ä¿¡æ¯" }, |
| | | { name: "coalQualityMaintenance", label: "ç
¤è´¨æ¹æ¡" }, |
| | | { name: "coalMeiZhiZiDuanWeiHu", label: "ç
¤è´¨å段" }, |
| | | ]); |
| | | |
| | | // ===== å·¥å
·å½æ° ===== |
| | |
| | | buildAddressMap(res.data); |
| | | } |
| | | } catch (error) { |
| | | console.error('è·åå°åé项失败:', error); |
| | | console.error("è·åå°åé项失败:", error); |
| | | } |
| | | }; |
| | | |
| | |
| | | */ |
| | | const buildAddressMap = (areaData) => { |
| | | const buildMap = (list, pathList = []) => { |
| | | list.forEach(item => { |
| | | list.forEach((item) => { |
| | | const currentPath = [...pathList, item.label]; |
| | | addressMap.value[item.id] = { |
| | | name: item.label, |
| | | fullPath: currentPath.join(' / ') |
| | | fullPath: currentPath.join(" / "), |
| | | }; |
| | | if (item.children && item.children.length > 0) { |
| | | buildMap(item.children, currentPath); |
| | |
| | | * @description å°å°åIDæ°ç»è½¬æ¢ä¸ºå¯è¯»çå°åå符串 |
| | | */ |
| | | const formatAddressArray = (addressIds) => { |
| | | if (!addressMap.value || Object.keys(addressMap.value).length === 0 || |
| | | !addressIds || !Array.isArray(addressIds) || addressIds.length === 0 || |
| | | addressIds.every(id => !id)) { |
| | | return '--'; |
| | | if ( |
| | | !addressMap.value || |
| | | Object.keys(addressMap.value).length === 0 || |
| | | !addressIds || |
| | | !Array.isArray(addressIds) || |
| | | addressIds.length === 0 || |
| | | addressIds.every((id) => !id) |
| | | ) { |
| | | return "--"; |
| | | } |
| | | |
| | | const addressNames = addressIds.map(id => addressMap.value[id]?.name || '--'); |
| | | const addressNames = addressIds.map( |
| | | (id) => addressMap.value[id]?.name || "--" |
| | | ); |
| | | |
| | | if (addressNames.every(name => name === '--')) { |
| | | return '--'; |
| | | if (addressNames.every((name) => name === "--")) { |
| | | return "--"; |
| | | } |
| | | |
| | | return addressNames.filter(name => name !== '--').join(' / '); |
| | | return addressNames.filter((name) => name !== "--").join(" / "); |
| | | }; |
| | | |
| | | /** |
| | |
| | | const res = await testUserList(); |
| | | if (res && res.data) { |
| | | userList.value = res.data; |
| | | userList.value.forEach(user => { |
| | | userList.value.forEach((user) => { |
| | | userMap.value[user.userId] = user.username; |
| | | }); |
| | | } |
| | | } catch (error) { |
| | | console.error('è·åç¨æ·å表失败:', error); |
| | | console.error("è·åç¨æ·å表失败:", error); |
| | | } |
| | | }; |
| | | |
| | |
| | | */ |
| | | const coalFieldData = async () => { |
| | | try { |
| | | const {data, code} = await getCoalFieldList(); |
| | | const { data, code } = await getCoalFieldList(); |
| | | if (code === 200) { |
| | | coalFieldList.value = data; |
| | | } |
| | | } catch (error) { |
| | | console.error('è·åç
¤è´¨åæ®µæ°æ®å¤±è´¥:', error); |
| | | console.error("è·åç
¤è´¨åæ®µæ°æ®å¤±è´¥:", error); |
| | | } |
| | | }; |
| | | |
| | |
| | | * @description éè¿å段IDå¹é
对åºçåæ®µåç§° |
| | | */ |
| | | const getFieldDisplayName = (fieldId) => { |
| | | if (!fieldId) return '--'; |
| | | if (!fieldId) return "--"; |
| | | |
| | | const numId = parseInt(fieldId); |
| | | const matchedField = coalFieldList.value.find(item => item.id === numId); |
| | | const matchedField = coalFieldList.value.find((item) => item.id === numId); |
| | | |
| | | return matchedField ? matchedField.fieldName : numId; |
| | | }; |
| | | |
| | | // ===== 计ç®å±æ§ ===== |
| | | |
| | | /** |
| | | * å½åæ ç¾é¡µæ¯å¦æ¯æå¯¼åºåè½ |
| | | */ |
| | | const canExport = computed(() => { |
| | | return ['supplier', 'customer'].includes(tabName.value); |
| | | return ["supplier", "customer"].includes(tabName.value); |
| | | }); |
| | | |
| | | /** |
| | |
| | | customer: "ä¾åºå/è¯å«ç /详ç»å°å", |
| | | coal: "请è¾å
¥æç´¢ä¿¡æ¯", |
| | | coalQualityMaintenance: "请è¾å
¥æç´¢ä¿¡æ¯", |
| | | coalMeiZhiZiDuanWeiHu: "请è¾å
¥æç´¢ä¿¡æ¯" |
| | | coalMeiZhiZiDuanWeiHu: "请è¾å
¥æç´¢ä¿¡æ¯", |
| | | }; |
| | | return placeholderMap[tabName.value] || "请è¾å
¥æç´¢ä¿¡æ¯"; |
| | | }); |
| | |
| | | * æ¯å¦æ¾ç¤ºæç´¢æ¡ |
| | | */ |
| | | const shouldShowSearch = computed(() => { |
| | | return ['supplier', 'customer', 'coal', 'coalQualityMaintenance', 'coalMeiZhiZiDuanWeiHu'].includes(tabName.value); |
| | | return [ |
| | | "supplier", |
| | | "customer", |
| | | "coal", |
| | | "coalQualityMaintenance", |
| | | "coalMeiZhiZiDuanWeiHu", |
| | | ].includes(tabName.value); |
| | | }); |
| | | |
| | | /** |
| | |
| | | */ |
| | | const selectedCount = computed(() => selectedRows.value.length); |
| | | |
| | | /** |
| | | * æ¯å¦æéä¸çè¡ |
| | | */ |
| | | const hasSelectedRows = computed(() => selectedCount.value > 0); |
| | | |
| | | // ===== è¡¨æ ¼åé
ç½® ===== |
| | | |
| | | /** |
| | | * ä¾åºåè¡¨æ ¼åé
ç½® |
| | | */ |
| | | const supplierColumns = ref([ |
| | | {prop: "supplierName", label: "ä¾åºååç§°", minWidth: 100}, |
| | | {prop: "taxpayerId", label: "ç»ä¸äººè¯å«å·", minWidth: 170}, |
| | | { prop: "supplierName", label: "ä¾åºååç§°", minWidth: 100 }, |
| | | { prop: "taxpayerId", label: "ç»ä¸äººè¯å«å·", minWidth: 170 }, |
| | | { |
| | | prop: "bids", |
| | | label: "ç»è¥å°å", |
| | |
| | | formatter: (row) => { |
| | | const addressIds = [row.bprovinceId, row.bcityId, row.bdistrictId]; |
| | | return formatAddressArray(addressIds); |
| | | } |
| | | }, |
| | | }, |
| | | {prop: "businessAddress", label: "ç»è¥è¯¦ç»å°å", minWidth: 150}, |
| | | {prop: "bankAccount", label: "弿·è¡", minWidth: 120}, |
| | | {prop: "bankName", label: "é¶è¡è´¦å·", minWidth: 150}, |
| | | {prop: "contactPerson", label: "è系人", minWidth: 100}, |
| | | { prop: "businessAddress", label: "ç»è¥è¯¦ç»å°å", minWidth: 150 }, |
| | | { prop: "bankAccount", label: "弿·è¡", minWidth: 120 }, |
| | | { prop: "contactPerson", label: "è系人", minWidth: 100 }, |
| | | { |
| | | prop: "cids", |
| | | label: "è系人å°å", |
| | |
| | | formatter: (row) => { |
| | | const addressIds = [row.cprovinceId, row.ccityId, row.cdistrictId]; |
| | | return formatAddressArray(addressIds); |
| | | } |
| | | }, |
| | | }, |
| | | {prop: "contactAddress", label: "è系人详ç»å°å", minWidth: 120}, |
| | | {prop: "updateTime", label: "ç»´æ¤æ¥æ", minWidth: 120}, |
| | | { prop: "contactAddress", label: "è系人详ç»å°å", minWidth: 120 }, |
| | | ]); |
| | | |
| | | /** |
| | | * 客æ·è¡¨æ ¼åé
ç½® |
| | | */ |
| | | const customerColumns = ref([ |
| | | {prop: "customerName", label: "客æ·åç§°", minWidth: 100}, |
| | | {prop: "taxpayerId", label: "ç»ä¸äººè¯å«å·", minWidth: 120}, |
| | | { prop: "customerName", label: "客æ·åç§°", minWidth: 100 }, |
| | | { prop: "taxpayerId", label: "ç»ä¸äººè¯å«å·", minWidth: 120 }, |
| | | { |
| | | prop: "bids", |
| | | label: "ç»è¥å°å", |
| | | minWidth: 150, |
| | | showOverflowTooltip: true, |
| | | formatter: (row) => { |
| | | const addressIds = [row.businessProvinceId, row.businessCityId, row.businessDistrictId]; |
| | | const addressIds = [ |
| | | row.businessProvinceId, |
| | | row.businessCityId, |
| | | row.businessDistrictId, |
| | | ]; |
| | | return formatAddressArray(addressIds); |
| | | } |
| | | }, |
| | | }, |
| | | {prop: "businessAddress", label: "详ç»å°å", minWidth: 150}, |
| | | {prop: "bankName", label: "弿·è¡", minWidth: 120}, |
| | | {prop: "bankAccount", label: "é¶è¡è´¦å·", minWidth: 150}, |
| | | {prop: "contactPerson", label: "è系人", minWidth: 100}, |
| | | {prop: "contactPhone", label: "è系人çµè¯", minWidth: 100}, |
| | | { prop: "businessAddress", label: "详ç»å°å", minWidth: 150 }, |
| | | { prop: "bankName", label: "弿·è¡", minWidth: 120 }, |
| | | { prop: "bankAccount", label: "é¶è¡è´¦å·", minWidth: 150 }, |
| | | { prop: "contactPerson", label: "è系人", minWidth: 100 }, |
| | | { prop: "contactPhone", label: "è系人çµè¯", minWidth: 100 }, |
| | | { |
| | | prop: "cids", |
| | | label: "è系人å°å", |
| | |
| | | formatter: (row) => { |
| | | const addressIds = [row.provinceId, row.cityId, row.districtId]; |
| | | return formatAddressArray(addressIds); |
| | | } |
| | | }, |
| | | }, |
| | | {prop: "contactAddress", label: "è系人详ç»å°å", minWidth: 150}, |
| | | {prop: "updateTime", label: "ç»´æ¤æ¥æ", minWidth: 100}, |
| | | { prop: "contactAddress", label: "è系人详ç»å°å", minWidth: 150 }, |
| | | { prop: "updateTime", label: "ç»´æ¤æ¥æ", minWidth: 100 }, |
| | | ]); |
| | | |
| | | /** |
| | | * ç
¤ç§è¡¨æ ¼åé
ç½® |
| | | */ |
| | | const coalColumns = ref([ |
| | | {prop: "coal", label: "ç
¤ç§åç§°", minWidth: 200}, |
| | | { prop: "coal", label: "ç
¤ç§åç§°", minWidth: 200 }, |
| | | { |
| | | prop: "maintainerId", |
| | | label: "ç»´æ¤äºº", |
| | | minWidth: 120, |
| | | formatter: (row, column, cellValue) => { |
| | | if (!userMap.value || Object.keys(userMap.value).length === 0) { |
| | | return '--'; |
| | | return "--"; |
| | | } |
| | | if (cellValue === null || cellValue === undefined || cellValue === '') { |
| | | return '--'; |
| | | if (cellValue === null || cellValue === undefined || cellValue === "") { |
| | | return "--"; |
| | | } |
| | | return userMap.value[cellValue] || '--'; |
| | | } |
| | | return userMap.value[cellValue] || "--"; |
| | | }, |
| | | }, |
| | | {prop: "maintenanceDate", label: "ç»´æ¤æ¥æ", minWidth: 150}, |
| | | { prop: "maintenanceDate", label: "ç»´æ¤æ¥æ", minWidth: 150 }, |
| | | ]); |
| | | |
| | | /** |
| | | * ç
¤è´¨æ¹æ¡è¡¨æ ¼åé
ç½® |
| | | */ |
| | | const coalQualityMaintenanceColumns = ref([ |
| | | {prop: "plan", label: "æ¹æ¡åç§°", minWidth: 100}, |
| | | { prop: "plan", label: "æ¹æ¡åç§°", minWidth: 100 }, |
| | | { |
| | | prop: "fieldIds", |
| | | label: "åæ®µåç§°", |
| | |
| | | slot: true, |
| | | formatter: (row, column, cellValue) => { |
| | | if (Array.isArray(cellValue)) { |
| | | return cellValue.map(item => item); |
| | | return cellValue.map((item) => item); |
| | | } |
| | | return cellValue || '--'; |
| | | } |
| | | return cellValue || "--"; |
| | | }, |
| | | }, |
| | | {prop: "schemeDesc", label: "åæ®µæè¿°", minWidth: 100}, |
| | | { prop: "schemeDesc", label: "åæ®µæè¿°", minWidth: 100 }, |
| | | ]); |
| | | |
| | | /** |
| | | * ç
¤è´¨åæ®µè¡¨æ ¼åé
ç½® |
| | | */ |
| | | const coalMeiZhiZiDuanWeiHuColumns = ref([ |
| | | {prop: "fieldName", label: "åæ®µåç§°", minWidth: 200}, |
| | | {prop: "fieldDescription", label: "åæ®µæè¿°", minWidth: 200}, |
| | | { prop: "fieldName", label: "åæ®µåç§°", minWidth: 200 }, |
| | | { prop: "fieldDescription", label: "åæ®µæè¿°", minWidth: 200 }, |
| | | ]); |
| | | // ===== äºä»¶å¤ç彿° ===== |
| | | |
| | |
| | | coalMeiZhiZiDuanWeiHu: () => { |
| | | columns.value = coalMeiZhiZiDuanWeiHuColumns.value; |
| | | getList(); |
| | | } |
| | | }, |
| | | }; |
| | | |
| | | // æ§è¡å¯¹åºçé
ç½®å½æ° |
| | |
| | | * @description æ ¹æ®æ ç¾é¡µç±»åè®¾ç½®å¼¹çªæ é¢å¹¶æå¼å¼¹çª |
| | | */ |
| | | const handleAddEdit = (currentTabName) => { |
| | | const actionText = addOrEdit.value === "add" ? "æ°å¢" : "ç¼è¾"; |
| | | const actionText = |
| | | addOrEdit.value === "add" |
| | | ? "æ°å¢" |
| | | : addOrEdit.value === "edit" |
| | | ? "ç¼è¾" |
| | | : "æ¥ç"; |
| | | |
| | | const tabTitleMap = { |
| | | supplier: "ä¾åºåä¿¡æ¯", |
| | | customer: "客æ·ä¿¡æ¯", |
| | | coal: "ç
¤ç§ä¿¡æ¯", |
| | | coalQualityMaintenance: "ç
¤è´¨æ¹æ¡ç»´æ¤", |
| | | coalMeiZhiZiDuanWeiHu: "ç
¤è´¨å段维æ¤" |
| | | coalMeiZhiZiDuanWeiHu: "ç
¤è´¨å段维æ¤", |
| | | }; |
| | | |
| | | title.value = `${actionText}${tabTitleMap[currentTabName] || ''}`; |
| | | title.value = `${actionText}${tabTitleMap[currentTabName] || ""}`; |
| | | openDialog(); |
| | | }; |
| | | |
| | |
| | | * @description æ ¹æ®ç¼è¾ç¶æå³å®æ¯å¦å¤å¶è¡¨åæ°æ® |
| | | */ |
| | | const openDialog = () => { |
| | | if (addOrEdit.value === "edit") { |
| | | if (addOrEdit.value === "edit" || addOrEdit.value === "viewRow") { |
| | | copyForm.value = JSON.parse(JSON.stringify(form.value)); |
| | | } else { |
| | | form.value = {}; |
| | |
| | | } |
| | | |
| | | // æå»ºå®¢æ·ä¸å¡å°åæ°ç» |
| | | if (form.value.businessCityId && form.value.businessDistrictId && form.value.businessProvinceId) { |
| | | form.value.bids = [row.businessProvinceId, row.businessCityId, row.businessDistrictId]; |
| | | if ( |
| | | form.value.businessCityId && |
| | | form.value.businessDistrictId && |
| | | form.value.businessProvinceId |
| | | ) { |
| | | form.value.bids = [ |
| | | row.businessProvinceId, |
| | | row.businessCityId, |
| | | row.businessDistrictId, |
| | | ]; |
| | | } |
| | | |
| | | // æå»ºå®¢æ·èç³»å°åæ°ç» |
| | |
| | | handleAddEdit(tabName.value); |
| | | }; |
| | | |
| | | |
| | | /** |
| | | * æ¹éå é¤å¤ç |
| | | * @description æ¹éå é¤éä¸çè®°å½ |
| | |
| | | return; |
| | | } |
| | | |
| | | const deleteIds = selectedRows.value.map(item => item.id); |
| | | const deleteIds = selectedRows.value.map((item) => item.id); |
| | | |
| | | try { |
| | | await ElMessageBox.confirm("ç¡®å®å é¤éä¸çæ°æ®åï¼", "æç¤º", { |
| | |
| | | supplier: delSupply, |
| | | coal: delCoalInfo, |
| | | coalQualityMaintenance: () => { |
| | | throw new Error('delCoalQuality API not imported'); |
| | | throw new Error("delCoalQuality API not imported"); |
| | | }, |
| | | customer: delCustomer, |
| | | coalMeiZhiZiDuanWeiHu: deleteCoalField |
| | | coalMeiZhiZiDuanWeiHu: deleteCoalField, |
| | | }; |
| | | |
| | | const deleteApi = deleteApiMap[tabName.value]; |
| | |
| | | ElMessage.error("å 餿¥å£æªé
ç½®"); |
| | | return; |
| | | } |
| | | console.log(deleteIds) |
| | | console.log(deleteIds); |
| | | const res = await deleteApi(deleteIds); |
| | | |
| | | if (res.code !== 200 && res.msg !== "æä½æå") { |
| | |
| | | ElMessage.success("å 餿å"); |
| | | await getList(); |
| | | } catch (error) { |
| | | if (error.message !== 'cancel') { |
| | | console.error('å 餿ä½å¤±è´¥:', error); |
| | | if (error.message !== "cancel") { |
| | | console.error("å 餿ä½å¤±è´¥:", error); |
| | | ElMessage.error("å é¤å¤±è´¥ï¼è¯·ç¨ååè¯"); |
| | | } else { |
| | | ElMessage.info("已忶å 餿ä½"); |
| | |
| | | */ |
| | | const handleExport = () => { |
| | | const exportConfig = { |
| | | supplier: {api: "/supply/export", name: "ä¾åºåä¿¡æ¯"}, |
| | | customer: {api: "/customer/export", name: "客æ·ä¿¡æ¯"}, |
| | | coal: {api: "/supply/export", name: "ç
¤ç§ä¿¡æ¯"}, |
| | | coalQualityMaintenance: {api: "/supply/export", name: "ç
¤è´¨ç»´æ¤ä¿¡æ¯"} |
| | | supplier: { api: "/supply/export", name: "ä¾åºåä¿¡æ¯" }, |
| | | customer: { api: "/customer/export", name: "客æ·ä¿¡æ¯" }, |
| | | coal: { api: "/supply/export", name: "ç
¤ç§ä¿¡æ¯" }, |
| | | coalQualityMaintenance: { api: "/supply/export", name: "ç
¤è´¨ç»´æ¤ä¿¡æ¯" }, |
| | | }; |
| | | |
| | | const config = exportConfig[tabName.value]; |
| | |
| | | * @param {string} name - å¯¼åºæä»¶ååç¼ |
| | | */ |
| | | const exportData = (api, name) => { |
| | | proxy.download(api, {...queryParams}, `${name}${new Date().getTime()}.xlsx`); |
| | | proxy.download( |
| | | api, |
| | | { ...queryParams }, |
| | | `${name}${new Date().getTime()}.xlsx` |
| | | ); |
| | | ElMessage.success("å¯¼åºæ°æ®ï¼" + name); |
| | | }; |
| | | // ===== æ°æ®è·å彿° ===== |
| | |
| | | customer: () => getCustomerList(apiParams), |
| | | coal: () => getCoalInfo(apiParams), |
| | | coalQualityMaintenance: () => getCoalPlanList(apiParams), |
| | | coalMeiZhiZiDuanWeiHu: () => coalField(apiParams) |
| | | coalMeiZhiZiDuanWeiHu: () => coalField(apiParams), |
| | | }; |
| | | |
| | | const apiFunction = apiMap[tabName.value]; |
| | | return apiFunction ? apiFunction() : Promise.reject(new Error('æªæ¾å°å¯¹åºçAPIæ¥å£')); |
| | | return apiFunction |
| | | ? apiFunction() |
| | | : Promise.reject(new Error("æªæ¾å°å¯¹åºçAPIæ¥å£")); |
| | | }; |
| | | |
| | | /** |
| | |
| | | const getList = async () => { |
| | | try { |
| | | loading.value = true; |
| | | const {data, code} = await selectInterface(); |
| | | const { data, code } = await selectInterface(); |
| | | |
| | | if (code !== 200) { |
| | | ElMessage.error("è·åæ°æ®å¤±è´¥ï¼" + (data?.msg || 'æªç¥é误')); |
| | | ElMessage.error("è·åæ°æ®å¤±è´¥ï¼" + (data?.msg || "æªç¥é误")); |
| | | return; |
| | | } |
| | | |
| | | tableData.value = data.records || []; |
| | | total.value = data.total || 0; |
| | | } catch (error) { |
| | | console.error('è·ååè¡¨æ°æ®å¤±è´¥:', error); |
| | | console.error("è·ååè¡¨æ°æ®å¤±è´¥:", error); |
| | | ElMessage.error("è·åæ°æ®å¤±è´¥ï¼è¯·ç¨ååè¯"); |
| | | } finally { |
| | | loading.value = false; |
| | | } |
| | | }; |
| | | |
| | | const handleView = (row) => { |
| | | form.value = JSON.parse(JSON.stringify(row)); |
| | | // æå»ºä¾åºåä¸å¡å°åæ°ç» |
| | | if (form.value.bprovinceId && form.value.bdistrictId && form.value.bcityId) { |
| | | form.value.bids = [row.bprovinceId, row.bcityId, row.bdistrictId]; |
| | | } |
| | | |
| | | // æå»ºä¾åºåèç³»å°åæ°ç» |
| | | if (form.value.cprovinceId && form.value.cdistrictId && form.value.ccityId) { |
| | | form.value.cids = [row.cprovinceId, row.ccityId, row.cdistrictId]; |
| | | } |
| | | |
| | | // æå»ºå®¢æ·ä¸å¡å°åæ°ç» |
| | | if ( |
| | | form.value.businessCityId && |
| | | form.value.businessDistrictId && |
| | | form.value.businessProvinceId |
| | | ) { |
| | | form.value.bids = [ |
| | | row.businessProvinceId, |
| | | row.businessCityId, |
| | | row.businessDistrictId, |
| | | ]; |
| | | } |
| | | |
| | | // æå»ºå®¢æ·èç³»å°åæ°ç» |
| | | if (form.value.cityId && form.value.districtId && form.value.provinceId) { |
| | | form.value.cids = [row.provinceId, row.cityId, row.districtId]; |
| | | } |
| | | addOrEdit.value = "viewRow"; |
| | | handleAddEdit(tabName.value); |
| | | }; |
| | | |
| | | |
| | | // ===== çå½å¨æé©å ===== |
| | | |
| | |
| | | try { |
| | | // å¹¶è¡æ§è¡åå§åæä½ |
| | | await Promise.all([ |
| | | handleTabClick({props: {name: "supplier"}}), |
| | | handleTabClick({ props: { name: "supplier" } }), |
| | | fetchAreaOptions(), |
| | | getUserList() |
| | | getUserList(), |
| | | ]); |
| | | } catch (error) { |
| | | console.error('ç»ä»¶åå§å失败:', error); |
| | | console.error("ç»ä»¶åå§å失败:", error); |
| | | ElMessage.error("页é¢åå§å失败ï¼è¯·å·æ°éè¯"); |
| | | } |
| | | }); |
| | |
| | | .main-container { |
| | | background: red !important; |
| | | } |
| | | </style> |
| | | </style> |
| | |
| | | <el-input |
| | | v-model="formData.coal" |
| | | placeholder="请è¾å
¥ç
¤ç§åç§°" |
| | | :disabled="isViewMode" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="ç»´æ¤äººå§å" prop="maintainerId"> |
| | |
| | | default: '' |
| | | }, |
| | | }) |
| | | const isViewMode = computed(() => props.addOrEdit.includes("viewRow")); |
| | | const copyForm = defineModel("copyForm", { |
| | | required: true, |
| | | type: Object, |
| | |
| | | <el-input |
| | | v-model="formData.fieldName" |
| | | placeholder="请è¾å
¥å段åç§°" |
| | | :disabled="isViewMode" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="åæ®µæè¿°" prop="fieldDescription"> |
| | | <el-input v-model="formData.fieldDescription" type="textarea" placeholder="请è¾å
¥å段æè¿°"/> |
| | | <el-input v-model="formData.fieldDescription" type="textarea" placeholder="请è¾å
¥å段æè¿°" :disabled="isViewMode"/> |
| | | </el-form-item> |
| | | <el-form-item class="dialog-footer"> |
| | | <el-button v-if="addOrEdit === 'edit'" @click="resetForm" |
| | |
| | | default: "", |
| | | }, |
| | | }); |
| | | const isViewMode = computed(() => { |
| | | return props.addOrEdit.includes("view"); |
| | | }); |
| | | const copyForm = defineModel("copyForm", { |
| | | required: true, |
| | | type: Object, |
| | |
| | | style="max-width: 400px; margin: 0 auto"> |
| | | <!-- æ¹æ¡åç§°è¾å
¥æ¡ --> |
| | | <el-form-item label="ç
¤è´¨æ¹æ¡åç§°" prop="plan"> |
| | | <el-input v-model="formData.plan" placeholder="请è¾å
¥ç
¤è´¨æ¹æ¡åç§°" clearable/> |
| | | <el-input v-model="formData.plan" placeholder="请è¾å
¥ç
¤è´¨æ¹æ¡åç§°" clearable :disabled="isViewMode"/> |
| | | </el-form-item> |
| | | |
| | | <!-- ç
¤è´¨å段å¤éä¸ææ¡ --> |
| | | <el-form-item label="ç
¤è´¨æ¹æ¡ç±»å" prop="coalFieldList"> |
| | | <el-select v-model="formData.coalFieldList" placeholder="è¯·éæ©ç
¤è´¨æ¹æ¡ç±»å" style="width: 100%" clearable |
| | | multiple> |
| | | multiple :disabled="isViewMode"> |
| | | <el-option v-for="item in fieldOptions" :key="item.id" :label="item.label" :value="item"/> |
| | | </el-select> |
| | | </el-form-item> |
| | | |
| | | <!-- æ¹æ¡æè¿°ææ¬å --> |
| | | <el-form-item label="ç
¤è´¨æ¹æ¡æè¿°" prop="schemeDesc"> |
| | | <el-input v-model="formData.schemeDesc" type="textarea" placeholder="请è¾å
¥ç
¤è´¨æ¹æ¡æè¿°" :rows="3"/> |
| | | <el-input v-model="formData.schemeDesc" type="textarea" placeholder="请è¾å
¥ç
¤è´¨æ¹æ¡æè¿°" :rows="3" :disabled="isViewMode"/> |
| | | </el-form-item> |
| | | |
| | | <!-- æä½æé®åºå --> |
| | |
| | | default: "", |
| | | }, |
| | | }); |
| | | const isViewMode = computed(() => props.addOrEdit.includes("view")); |
| | | const copyForm = defineModel("copyForm", { |
| | | required: true, |
| | | type: Object, |
| | |
| | | <el-form ref="formRef" style="max-width: 400px; margin: 0 auto" :model="formData" :rules="rules" |
| | | label-width="auto"> |
| | | <el-form-item label="客æ·åç§°" prop="customerName"> |
| | | <el-input v-model="formData.customerName" placeholder="请è¾å
¥å®¢æ·åç§°"/> |
| | | <el-input v-model="formData.customerName" placeholder="请è¾å
¥å®¢æ·åç§°" :disabled="isViewMode"/> |
| | | </el-form-item> |
| | | <el-form-item label="纳ç¨äººè¯å«å·" prop="taxpayerId"> |
| | | <el-input v-model="formData.taxpayerId" placeholder="请è¾å
¥çº³ç¨äººè¯å«å·"/> |
| | | <el-input v-model="formData.taxpayerId" placeholder="请è¾å
¥çº³ç¨äººè¯å«å·" :disabled="isViewMode"/> |
| | | </el-form-item> |
| | | <el-form-item label="ç»è¥å°å" prop="bids"> |
| | | <el-cascader placeholder="è¯·éæ©ç»è¥å°å" size="default" :options="addressSelectOptions" |
| | | v-model="formData.bids" |
| | | :props="cascaderProps" @change="handleChange"> |
| | | :props="cascaderProps" @change="handleChange" :disabled="isViewMode"> |
| | | </el-cascader> |
| | | </el-form-item> |
| | | <el-form-item label="ç»è¥è¯¦ç»å°å" prop="businessAddress"> |
| | | <el-input v-model="formData.businessAddress" placeholder="请è¾å
¥ç»è¥è¯¦ç»å°å"/> |
| | | <el-input v-model="formData.businessAddress" placeholder="请è¾å
¥ç»è¥è¯¦ç»å°å" :disabled="isViewMode"/> |
| | | </el-form-item> |
| | | <el-form-item label="弿·è¡" prop="bankName"> |
| | | <el-input v-model="formData.bankName" placeholder="请è¾å
¥å¼æ·è¡"/> |
| | | <el-input v-model="formData.bankName" placeholder="请è¾å
¥å¼æ·è¡" :disabled="isViewMode"/> |
| | | </el-form-item> |
| | | <el-form-item label="é¶è¡è´¦æ·" prop="bankAccount"> |
| | | <el-input v-model="formData.bankAccount" placeholder="请è¾å
¥é¶è¡è´¦æ·"/> |
| | | <el-input v-model="formData.bankAccount" placeholder="请è¾å
¥é¶è¡è´¦æ·" :disabled="isViewMode"/> |
| | | </el-form-item> |
| | | <el-form-item label="è系人" prop="contactPerson"> |
| | | <el-input v-model="formData.contactPerson" placeholder="请è¾å
¥è系人"/> |
| | | <el-input v-model="formData.contactPerson" placeholder="请è¾å
¥è系人" :disabled="isViewMode"/> |
| | | </el-form-item> |
| | | <el-form-item label="èç³»çµè¯" prop="contactPhone"> |
| | | <el-input v-model="formData.contactPhone" placeholder="请è¾å
¥èç³»çµè¯"/> |
| | | <el-input v-model="formData.contactPhone" placeholder="请è¾å
¥èç³»çµè¯" :disabled="isViewMode"/> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="è系人å°å" prop="cids"> |
| | | <el-cascader placeholder="è¯·éæ©è系人å°å" size="default" :options="addressSelectOptions" |
| | | v-model="formData.cids" |
| | | :props="cascaderProps" @change="handleChange"> |
| | | :props="cascaderProps" @change="handleChange" :disabled="isViewMode"> |
| | | </el-cascader> |
| | | </el-form-item> |
| | | <el-form-item label="è系人详ç»" prop="contactAddress"> |
| | | <el-input v-model="formData.contactAddress" placeholder="请è¾å
¥è系人详ç»å°å"/> |
| | | <el-input v-model="formData.contactAddress" placeholder="请è¾å
¥è系人详ç»å°å" :disabled="isViewMode"/> |
| | | </el-form-item> |
| | | <el-form-item class="dialog-footer"> |
| | | <el-button v-if="addOrEdit === 'edit'" @click="resetForm">éç½®</el-button> |
| | |
| | | <script setup> |
| | | import {ref, watch, onMounted} from "vue"; |
| | | import {getAreaOptions} from "@/api/system/area.js"; |
| | | import addressList from "@/api/jsonApi/areaList.json"; |
| | | import {addOrEditCustomer} from "@/api/basicInformation/customer"; |
| | | |
| | | const props = defineProps({ |
| | |
| | | default: "", |
| | | }, |
| | | }); |
| | | |
| | | const isViewMode = computed(() => props.addOrEdit.includes("viewRow")); |
| | | const handleChange = (value) => { |
| | | console.log(value); |
| | | }; |
| | |
| | | <template> |
| | | <div> |
| | | <el-dialog v-model="dialogVisible" :title="title" width="600" :close-on-click-modal="false" |
| | | :before-close="handleClose"> |
| | | <el-form ref="formRef" style="max-width: 400px; margin: 0 auto" :model="formData" :rules="rules" |
| | | label-width="auto"> |
| | | <el-form-item label="ä¾åºååç§°" prop="supplierName"> |
| | | <el-input v-model="formData.supplierName" placeholder="请è¾å
¥ä¾è´§ååç§°"/> |
| | | <el-dialog |
| | | v-model="dialogVisible" |
| | | :title="title" |
| | | width="600" |
| | | :close-on-click-modal="false" |
| | | :before-close="handleClose" |
| | | > |
| | | <el-form |
| | | ref="formRef" |
| | | style="max-width: 400px; margin: 0 auto" |
| | | :model="formData" |
| | | :rules="rules" |
| | | label-width="auto" |
| | | > <el-form-item |
| | | label="ä¾åºååç§°" |
| | | prop="supplierName" |
| | | > |
| | | <el-input |
| | | v-model="formData.supplierName" |
| | | placeholder="请è¾å
¥ä¾è´§ååç§°" |
| | | :disabled="isViewMode" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="纳ç¨äººè¯å«å·" prop="taxpayerId"> |
| | | <el-input v-model="formData.taxpayerId" placeholder="请è¾å
¥çº³ç¨äººè¯å«å·"/> |
| | | <el-form-item |
| | | label="纳ç¨äººè¯å«å·" |
| | | prop="taxpayerId" |
| | | > |
| | | <el-input |
| | | v-model="formData.taxpayerId" |
| | | placeholder="请è¾å
¥çº³ç¨äººè¯å«å·" |
| | | :disabled="isViewMode" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="ç»è¥å°å" prop="bids"> |
| | | <el-cascader placeholder="è¯·éæ©ç»è¥å°å" size="default" :options="addressSelectOptions" |
| | | v-model="formData.bids" |
| | | :props="cascaderProps" @change="handleChange"> |
| | | <el-form-item |
| | | label="ç»è¥å°å" |
| | | prop="bids" |
| | | > |
| | | <el-cascader |
| | | placeholder="è¯·éæ©ç»è¥å°å" |
| | | size="default" |
| | | :options="addressSelectOptions" |
| | | v-model="formData.bids" |
| | | :props="cascaderProps" |
| | | @change="handleChange" |
| | | :disabled="isViewMode" |
| | | > |
| | | </el-cascader> |
| | | </el-form-item> |
| | | <el-form-item label="详ç»å°å" prop="businessAddress"> |
| | | <el-input v-model="formData.businessAddress" placeholder="请è¾å
¥å®¢æ·è¯¦ç»å°å"/> |
| | | <el-form-item |
| | | label="详ç»å°å" |
| | | prop="businessAddress" |
| | | > |
| | | <el-input |
| | | v-model="formData.businessAddress" |
| | | placeholder="请è¾å
¥å®¢æ·è¯¦ç»å°å" |
| | | :disabled="isViewMode" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="弿·è¡" prop="bankAccount"> |
| | | <el-input v-model="formData.bankAccount" placeholder="请è¾å
¥å¼æ·è¡"/> |
| | | <el-form-item |
| | | label="弿·è¡" |
| | | prop="bankAccount" |
| | | > |
| | | <el-input |
| | | v-model="formData.bankAccount" |
| | | placeholder="请è¾å
¥å¼æ·è¡" |
| | | :disabled="isViewMode" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="é¶è¡è´¦æ·" prop="bankName"> |
| | | <el-input v-model="formData.bankName" placeholder="请è¾å
¥é¶è¡è´¦æ·"/> |
| | | <el-form-item |
| | | label="é¶è¡è´¦æ·" |
| | | prop="bankName" |
| | | > |
| | | <el-input |
| | | v-model="formData.bankName" |
| | | placeholder="请è¾å
¥é¶è¡è´¦æ·" |
| | | :disabled="isViewMode" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="è系人" prop="contactPerson"> |
| | | <el-input v-model="formData.contactPerson" placeholder="请è¾å
¥è系人"/> |
| | | <el-form-item |
| | | label="è系人" |
| | | prop="contactPerson" |
| | | > |
| | | <el-input |
| | | v-model="formData.contactPerson" |
| | | placeholder="请è¾å
¥è系人" |
| | | :disabled="isViewMode" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="è系人çµè¯" prop="contactPhone"> |
| | | <el-input v-model="formData.contactPhone" placeholder="请è¾å
¥è系人çµè¯"/> |
| | | <el-form-item |
| | | label="è系人çµè¯" |
| | | prop="contactPhone" |
| | | > |
| | | <el-input |
| | | v-model="formData.contactPhone" |
| | | placeholder="请è¾å
¥è系人çµè¯" |
| | | :disabled="isViewMode" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="è系人å°å" prop="cids"> |
| | | <el-cascader placeholder="è¯·éæ©è系人å°å" size="default" :options="addressSelectOptions" |
| | | v-model="formData.cids" |
| | | :props="cascaderProps" @change="handleChange"> |
| | | <el-form-item |
| | | label="è系人å°å" |
| | | prop="cids" |
| | | > |
| | | <el-cascader |
| | | placeholder="è¯·éæ©è系人å°å" |
| | | size="default" |
| | | :options="addressSelectOptions" |
| | | v-model="formData.cids" |
| | | :props="cascaderProps" |
| | | @change="handleChange" |
| | | :disabled="isViewMode" |
| | | > |
| | | </el-cascader> |
| | | </el-form-item> |
| | | <el-form-item label="è系人详ç»å°å" prop="contactAddress"> |
| | | <el-input v-model="formData.contactAddress" placeholder="请è¾å
¥è系人å°å"/> |
| | | <el-form-item |
| | | label="è系人详ç»å°å" |
| | | prop="contactAddress" |
| | | > |
| | | <el-input |
| | | v-model="formData.contactAddress" |
| | | placeholder="请è¾å
¥è系人å°å" |
| | | :disabled="isViewMode" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item class="dialog-footer"> |
| | | <el-button v-if="addOrEdit === 'edit'" @click="resetForm">éç½®</el-button> |
| | | <el-button v-if="addOrEdit === 'add'" @click="cancelForm">åæ¶</el-button> |
| | | <el-button v-if="addOrEdit === 'edit'" @click="resetForm" |
| | | >éç½®</el-button |
| | | > |
| | | <el-button v-if="addOrEdit !== 'edit'" @click="cancelForm" |
| | | >åæ¶</el-button |
| | | > |
| | | <el-button type="primary" @click="submitForm"> ç¡®å®</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | |
| | | </template> |
| | | |
| | | <script setup> |
| | | import {ref, watch, defineProps, onMounted} from "vue"; |
| | | import {addOrEditSupply} from "@/api/basicInformation/supplier"; |
| | | import {getAreaOptions} from "@/api/system/area.js"; |
| | | import { ref, watch, defineProps, onMounted, computed, reactive } from "vue"; |
| | | import { addOrEditSupply } from "@/api/basicInformation/supplier"; |
| | | import { getAreaOptions } from "@/api/system/area.js"; |
| | | |
| | | const props = defineProps({ |
| | | beforeClose: { |
| | | type: Function, |
| | | default: () => { |
| | | }, |
| | | default: () => {}, |
| | | }, |
| | | form: { |
| | | type: Object, |
| | |
| | | }, |
| | | }); |
| | | |
| | | // 计ç®å±æ§ï¼ç»ä¸æ§å¶æ¯å¦ç¦ç¨ |
| | | const isViewMode = computed(() => props.addOrEdit === 'viewRow'); |
| | | |
| | | const emit = defineEmits(["submit", "handleBeforeClose"]); |
| | | const copyForm = defineModel("copyForm", { |
| | | required: true, |
| | | type: Object, |
| | | }); |
| | | onMounted(() => { |
| | | fetchAreaOptions() |
| | | }) |
| | | fetchAreaOptions(); |
| | | }); |
| | | |
| | | // ä¿®æ¹æ å½¢éæ©çæ å° |
| | | const cascaderProps = ref({ |
| | | value: 'id', // æå®valueåæ®µä¸ºid |
| | | label: 'label', // æå®labelåæ®µ |
| | | children: 'children' // æå®åèç¹å段 |
| | | }) |
| | | value: "id", // æå®valueåæ®µä¸ºid |
| | | label: "label", // æå®labelåæ®µ |
| | | children: "children", // æå®åèç¹å段 |
| | | }); |
| | | |
| | | // å°åéæ©æ°æ® |
| | | const addressSelectOptions = ref([]); |
| | |
| | | if (res.code === 200) { |
| | | addressSelectOptions.value = res.data; |
| | | } |
| | | } |
| | | }; |
| | | |
| | | // å¤çå°åæ°æ®è½¬æ¢ |
| | | function mapAddress(list) { |
| | | return list.map(item => ({ |
| | | return list.map((item) => ({ |
| | | value: item.id, |
| | | label: item.name, |
| | | children: item.children ? mapAddress(item.children) : undefined |
| | | children: item.children ? mapAddress(item.children) : undefined, |
| | | })); |
| | | } |
| | | |
| | | // 表åå¼ç¨ |
| | | const formRef = ref(null); |
| | | // è¡¨åæ°æ® |
| | | const formData = ref({...props.form}); |
| | | const formData = ref({ ...props.form }); |
| | | // å¼¹çªå¯è§æ§ |
| | | const dialogVisible = defineModel("supplierDialogFormVisible", { |
| | | required: true, |
| | |
| | | }); |
| | | // çå¬å¤é¨ä¼ å
¥çè¡¨åæ°æ®åå |
| | | watch( |
| | | () => props.form, |
| | | (newVal) => { |
| | | formData.value = {...newVal}; |
| | | }, |
| | | {deep: true} |
| | | () => props.form, |
| | | (newVal) => { |
| | | formData.value = { ...newVal }; |
| | | }, |
| | | { deep: true } |
| | | ); |
| | | |
| | | // çå¬å
é¨å¼¹çªç¶æåå |
| | | watch( |
| | | () => dialogVisible.value, |
| | | (newVal) => { |
| | | emit("update:supplierDialogFormVisible", newVal); |
| | | } |
| | | () => dialogVisible.value, |
| | | (newVal) => { |
| | | emit("update:supplierDialogFormVisible", newVal); |
| | | } |
| | | ); |
| | | // å¤çå°åéæ©åå |
| | | const handleChange = (value) => { |
| | |
| | | await formRef.value.validate(async (valid, fields) => { |
| | | if (valid) { |
| | | const obj = ref({}); |
| | | if (props.title.includes('æ°å¢')) { |
| | | if (props.title.includes("æ°å¢")) { |
| | | let result = await addOrEditSupply({ |
| | | ...formData.value, |
| | | }) |
| | | }); |
| | | obj.value = { |
| | | title: "æ°å¢", |
| | | ...formData.value, |
| | | result |
| | | result, |
| | | }; |
| | | } else { |
| | | let result = await addOrEditSupply({ |
| | | ...formData.value, |
| | | }) |
| | | }); |
| | | obj.value = { |
| | | title: "ç¼è¾", |
| | | ...formData.value, |
| | | result |
| | | result, |
| | | }; |
| | | } |
| | | emit("submit", obj.value); |
| | |
| | | }; |
| | | const rules = reactive({ |
| | | supplierName: [ |
| | | {required: true, message: "请è¾å
¥ä¾è´§ååç§°", trigger: "blur"}, |
| | | { required: true, message: "请è¾å
¥ä¾è´§ååç§°", trigger: "blur" }, |
| | | ], |
| | | taxpayerId: [ |
| | | {required: true, message: "请æ£ç¡®è¾å
¥çº³ç¨äººè¯å«å·", trigger: "blur"}, |
| | | {min: 17, max: 20, message: "请è¾å
¥17-20ä½çº³ç¨äººè¯å«å·", trigger: "blur"}, |
| | | { required: true, message: "请æ£ç¡®è¾å
¥çº³ç¨äººè¯å«å·", trigger: "blur" }, |
| | | { min: 17, max: 20, message: "请è¾å
¥17-20ä½çº³ç¨äººè¯å«å·", trigger: "blur" }, |
| | | ], |
| | | // bids: [ |
| | | // { |
| | |
| | | // trigger: "change", |
| | | // }, |
| | | // ], |
| | | bankName: [{required: true, message: "请è¾å
¥é¶è¡è´¦æ·", trigger: "blur"}], |
| | | bankAccount: [{required: true, message: "请è¾å
¥å¼æ·è¡", trigger: "blur"}], |
| | | contactPerson: [{required: true, message: "è系人", trigger: "blur"}], |
| | | bankName: [{ required: true, message: "请è¾å
¥é¶è¡è´¦æ·", trigger: "blur" }], |
| | | bankAccount: [{ required: true, message: "请è¾å
¥å¼æ·è¡", trigger: "blur" }], |
| | | contactPerson: [{ required: true, message: "è系人", trigger: "blur" }], |
| | | contactPhone: [ |
| | | {required: true, message: "请è¾å
¥è系人", trigger: "blur"}, |
| | | {min: 11, max: 11, message: "请è¾å
¥11ä½è系人çµè¯", trigger: "blur"}, |
| | | { required: true, message: "请è¾å
¥è系人", trigger: "blur" }, |
| | | { min: 11, max: 11, message: "请è¾å
¥11ä½è系人çµè¯", trigger: "blur" }, |
| | | ], |
| | | }); |
| | | </script> |
| | |
| | | margin-top: 20px; |
| | | flex-direction: column; |
| | | } |
| | | </style> |
| | | </style> |
| | |
| | | @selection-change="handleSelectionChange" |
| | | :show-selection="true" |
| | | :border="true" |
| | | :maxHeight="480" |
| | | style="width: 100%;height: calc(100vh - 30em)" |
| | | operationsWidth="130" |
| | | :operations="operationsArr" |
| | | @edit="handleAdd" |
| | | @viewFile="viewFile" |
| | | v-if="tabName !== 'qrCodeScanRecord'" |
| | | ></ETable> |
| | | <el-table ref="table" :data="tableData" height="480" v-loading="tableLoading" v-else> |
| | | <el-table ref="table" :data="tableData" height="480" v-loading="tableLoading" border v-else style="width: 100%;height: calc(100vh - 27em)"> |
| | | <el-table-column label="åºå·" type="index" width="60" align="center" /> |
| | | <el-table-column prop="deviceName" label="设å¤åç§°" :show-overflow-tooltip="true"> |
| | | <template #default="scope"> |
| | |
| | | </div> |
| | | </div> |
| | | <div> |
| | | <el-table ref="table" :data="tableData" height="480" v-loading="tableLoading" v-if="activeTab !== 'qrCode'"> |
| | | <el-table ref="table" :data="tableData" height="480" v-loading="tableLoading" v-if="activeTab !== 'qrCode'" border style="width: 100%;height: calc(100vh - 20em)"> |
| | | <el-table-column label="åºå·" type="index" width="60" align="center" /> |
| | | <el-table-column prop="taskName" label="å·¡æ£ä»»å¡åç§°" :show-overflow-tooltip="true"></el-table-column> |
| | | <el-table-column prop="port" label="å°ç¹" :show-overflow-tooltip="true"></el-table-column> |
| | |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <el-table ref="table" :data="tableData" height="480" v-loading="tableLoading" v-if="activeTab === 'qrCode'"> |
| | | <el-table ref="table" :data="tableData" height="480" v-loading="tableLoading" v-if="activeTab === 'qrCode'" border style="width: 100%;height: calc(100vh - 23em)"> |
| | | <el-table-column label="åºå·" type="index" width="60" align="center" /> |
| | | <el-table-column prop="deviceName" label="设å¤åç§°" :show-overflow-tooltip="true"> |
| | | <template #default="scope"> |
| | |
| | | style="max-width: 400px; margin: 0 auto" |
| | | > |
| | | <el-form-item label="ä¾åºååç§°" prop="supplierId"> |
| | | <el-select v-model="form.supplierId" placeholder="è¯·éæ©ä¾åºå"> |
| | | <el-select v-model="form.supplierId" placeholder="è¯·éæ©ä¾åºå" :disabled="isViewMode"> |
| | | <el-option :label="item.label" v-for="item in supplyList" :key="item.value" :value="item.value"/> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="ç
¤ç§" prop="coalId"> |
| | | <el-select v-model="form.coalId" placeholder="è¯·éæ©ç
¤ç§"> |
| | | <el-select v-model="form.coalId" placeholder="è¯·éæ©ç
¤ç§" :disabled="isViewMode"> |
| | | <el-option :label="item.label" v-for="item in coalList" :key="item.value" :value="item.value"/> |
| | | </el-select> |
| | | </el-form-item> |
| | |
| | | v-model.number="form.purchaseQuantity" |
| | | placeholder="请è¾å
¥" |
| | | @blur="handleQuantityBlur" |
| | | :disabled="isViewMode" |
| | | > |
| | | <template v-slot:suffix> |
| | | <i style="font-style: normal">å¨</i> |
| | | </template> |
| | | </el-input> |
| | | </el-form-item |
| | | > |
| | | </el-form-item> |
| | | <el-form-item label="ç¨ç" prop="taxRate"> |
| | | <el-input |
| | | v-model.number="form.taxRate" |
| | | placeholder="请è¾å
¥ç¨ç" |
| | | @blur="handleTaxRateBlur" |
| | | :disabled="isViewMode" |
| | | > |
| | | <template v-slot:suffix> |
| | | <i style="font-style: normal">%</i> |
| | |
| | | v-model.number="form.priceExcludingTax" |
| | | placeholder="请è¾å
¥" |
| | | @blur="handlePriceBlur" |
| | | :disabled="isViewMode" |
| | | > |
| | | <template v-slot:suffix> |
| | | <i style="font-style: normal">å
</i> |
| | |
| | | <el-input |
| | | v-model.number="form.priceIncludingTax" |
| | | placeholder="èªå¨è®¡ç®" |
| | | :disabled="isViewMode" |
| | | > |
| | | <template v-slot:suffix> |
| | | <i style="font-style: normal">å
</i> |
| | |
| | | <el-input |
| | | v-model.number="form.totalPriceExcludingTax" |
| | | placeholder="èªå¨è®¡ç®" |
| | | :disabled="isViewMode" |
| | | > |
| | | <template v-slot:suffix> |
| | | <i style="font-style: normal">å
</i> |
| | |
| | | <el-input |
| | | v-model.number="form.totalPriceIncludingTax" |
| | | placeholder="èªå¨è®¡ç®" |
| | | :disabled="isViewMode" |
| | | > |
| | | <template v-slot:suffix> |
| | | <i style="font-style: normal">å
</i> |
| | |
| | | }); |
| | | const supplyList = ref([]); |
| | | const coalList = ref([]); |
| | | const isViewMode = computed(() => props.title.includes("æ¥ç")); |
| | | // è·åä¾åºå䏿åç
¤ç§ä¸æ |
| | | const getDropdownData = async () => { |
| | | try { |
| | |
| | | @delete="handleDeleteSuccess" |
| | | :show-selection="true" |
| | | :border="true" |
| | | :maxHeight="440" |
| | | style="width: 100%; height: calc(100vh - 26em)" |
| | | @viewRow="handleView" |
| | | :operations="['edit', 'viewRow']" |
| | | :operationsWidth="200" |
| | | :show-overflow-tooltip="false" |
| | | /> |
| | | <pagination |
| | | v-if="total > 0" |
| | |
| | | const MatchQuery = (data, name) => { |
| | | const list = name === "supplyRes" ? supplyRes.value.data : coalRes.value.data; |
| | | const item = list.find((items) => items.id == data); |
| | | return item ? item.coal || item.supplierName : ""; |
| | | return item ? item.coal || item.supplierName : ""; |
| | | }; |
| | | // è·åä¾åºåå表 |
| | | const supplyRes = ref([]); |
| | |
| | | const productionDialogs = ref(null); // æ·»å ref声æ |
| | | |
| | | const handleAddEdit = () => { |
| | | addOrEdit.value == "add" ? (title.value = "æ°å¢") : (title.value = "ç¼è¾"); |
| | | addOrEdit.value == "add" ? (title.value = "æ°å¢") : addOrEdit.value == "viewRow" ? (title.value = "æ¥ç") : (title.value = "ç¼è¾"); |
| | | title.value = title.value + "éè´ä¿¡æ¯"; |
| | | openDialog(); |
| | | }; |
| | | // æå¼å¼¹çª |
| | | const openDialog = () => { |
| | | if (addOrEdit.value === "edit") { |
| | | if (addOrEdit.value === "edit" || addOrEdit.value === "viewRow") { |
| | | // ç¡®ä¿å¤å¶ä¸ä»½æ°æ®ï¼é¿å
ç´æ¥å¼ç¨ |
| | | copyForm.value = JSON.parse(JSON.stringify(form.value)); |
| | | dialogFormVisible.value = true; |
| | |
| | | addOrEdit.value = "edit"; |
| | | handleAddEdit(); |
| | | }; |
| | | const handleView = (row) => { |
| | | form.value = JSON.parse(JSON.stringify(row)); |
| | | addOrEdit.value = "viewRow"; |
| | | handleAddEdit(); |
| | | }; |
| | | const handleDelete = () => { |
| | | if (selectedRows.value.length === 0) { |
| | | ElMessage.warning("è¯·éæ©è¦å é¤çæ°æ®"); |
| | |
| | | @change="(value) => handleCoalSelectChange(row, value)" |
| | | filterable |
| | | :key="`coalId-select-${$index}-${weekList.length}`" |
| | | :disabled="isViewMode" |
| | | > |
| | | <el-option |
| | | v-for="(item, index) of weekList" |
| | |
| | | placeholder="请è¾å
¥ç产æ°é" |
| | | type="number" |
| | | @input="handleInput('productionQuantity', $index, $event)" |
| | | :disabled="isViewMode" |
| | | /> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | placeholder="请è¾å
¥äººå·¥ææ¬" |
| | | type="number" |
| | | @input="handleInput('laborCost', $index, $event)" |
| | | :disabled="isViewMode" |
| | | > |
| | | <template #suffix> |
| | | <i style="font-style: normal">å
</i> |
| | |
| | | placeholder="请è¾å
¥è½èææ¬" |
| | | type="number" |
| | | @input="handleInput('energyConsumptionCost', $index, $event)" |
| | | :disabled="isViewMode" |
| | | > |
| | | <template #suffix> |
| | | <i style="font-style: normal">å
</i> |
| | |
| | | placeholder="请è¾å
¥è®¾å¤ææ§" |
| | | type="number" |
| | | @input="handleInput('equipmentDepreciation', $index, $event)" |
| | | :disabled="isViewMode" |
| | | > |
| | | <template #suffix> |
| | | <i style="font-style: normal">å
</i> |
| | |
| | | placeholder="请è¾å
¥éè´åä»·" |
| | | type="number" |
| | | @input="handleInput('purchasePrice', $index, $event)" |
| | | :disabled="isViewMode" |
| | | > |
| | | <template #suffix> |
| | | <i style="font-style: normal">å
</i> |
| | |
| | | type="number" |
| | | :readonly="autoCalculate" |
| | | @input="handleInput('totalCost', $index, $event)" |
| | | |
| | | > |
| | | <template #suffix> |
| | | <i style="font-style: normal">å
</i> |
| | |
| | | <template #default="{ row, $index }"> |
| | | <el-select |
| | | clearable |
| | | :model-value="getUserNameById(row.producer) || row.producer" |
| | | :model-value="getUserNameById(row.producerId) || row.producerId" |
| | | placeholder="è¯·éæ©ç产人" |
| | | @change="(value) => handleUserSelectChange(row, value)" |
| | | filterable |
| | | :key="`producer-select-${$index}-${userList.length}`" |
| | | :disabled="isViewMode" |
| | | > |
| | | <el-option |
| | | v-for="(item, index) of userList" |
| | |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | v-if="showOperations" |
| | | label="æä½" |
| | | width="120" |
| | | fixed="right" |
| | | v-if="dialogType !== 'viewRow'" |
| | | > |
| | | <template #default="{ $index }"> |
| | | <el-button |
| | |
| | | type: Boolean, |
| | | default: true, |
| | | }, |
| | | dialogType:{ |
| | | type: String, |
| | | default:'add' |
| | | } |
| | | }); |
| | | |
| | | const isViewMode = computed(() => props.dialogType === "viewRow"); |
| | | const emit = defineEmits(["update:modelValue", "input-change", "delete-row"]); |
| | | |
| | | // ä½¿ç¨ v-model è¿è¡ååç»å® |
| | |
| | | }; |
| | | // å¤çç¨æ·éæ©ååï¼æ°æ¹æ³ï¼åç§°éæ©è½¬IDï¼ |
| | | const handleUserSelectChange = (row, selectedName) => { |
| | | console.log("handleUserSelectChange", row, selectedName); |
| | | // æ ¹æ®éæ©çåç§°æ¾å°å¯¹åºçID |
| | | const userItem = userList.value.find(item => item.value === selectedName); |
| | | if (userItem) { |
| | | row.producer = userItem.key; // 设置为ID |
| | | row.producerId = userItem.key; // 设置为ID |
| | | } else { |
| | | row.producer = ''; // å¦ææ²¡æ¾å°ï¼æ¸
空 |
| | | row.producerId = ''; // å¦ææ²¡æ¾å°ï¼æ¸
空 |
| | | } |
| | | }; |
| | | // æ´é²æ¹æ³ç»ç¶ç»ä»¶ä½¿ç¨ |
| | |
| | | equipmentDepreciation: "", |
| | | purchasePrice: "", |
| | | totalCost: "", |
| | | producer: "", |
| | | producerId: "", |
| | | ...rowData, |
| | | }; |
| | | tableData.value = [...tableData.value, defaultRow]; |
| | |
| | | <template> |
| | | <el-dialog |
| | | v-model="dialogVisible" |
| | | :title="dialogType === 'add' ? 'æ°å¢ç产å å·¥' : 'ç¼è¾ç产å å·¥'" |
| | | :title="dialogType === 'add' ? 'æ°å¢ç产å å·¥' : dialogType === 'viewRow' ? 'æ¥çç产å å·¥' : 'ç¼è¾ç产å å·¥'" |
| | | width="1200px" |
| | | :close-on-click-modal="false" |
| | | @close="handleClose" |
| | | > |
| | | <el-row :gutter="10" style="margin-bottom: 10px"> |
| | | <el-row :gutter="10" style="margin-bottom: 10px" v-if="dialogType !== 'viewRow'"> |
| | | <el-col :span="3"> |
| | | <el-button type="primary" @click="handlData" |
| | | > |
| | |
| | | </el-row> |
| | | <ETableModify |
| | | :columns="columns" |
| | | :showOperations="false" |
| | | :showOperations="dialogType !== 'viewRow'" |
| | | height="200" |
| | | @cell-edit="handleCellEdit" |
| | | :tableData="tableData" |
| | | :showOverflowTooltip="false" |
| | | @row-click="handleRowClick" |
| | | :editableColumns="['usedQuantity']" |
| | | :editableColumns="dialogType === 'viewRow' ? [] : ['usedQuantity']" |
| | | :editableCells="dialogType !== 'viewRow'" |
| | | @delete="handleRemoveItem" |
| | | /> |
| | | <div class="empty-table"> |
| | | <h1>ç产æç»</h1> |
| | | <el-row :gutter="10"> |
| | | <el-col :span="2"> |
| | | <el-button type="primary" @click="addNewRow"> |
| | | <el-button type="primary" @click="addNewRow" v-if="dialogType !== 'viewRow'"> |
| | | <el-icon> |
| | | <Plus/> |
| | | </el-icon> |
| | |
| | | <ProductionDetailsTable |
| | | v-model="detailsTableData" |
| | | :border="false" |
| | | :show-operations="true" |
| | | :show-operations="dialogType !== 'viewRow'" |
| | | :auto-calculate="true" |
| | | @input-change="handleDetailsChange" |
| | | @delete-row="handleDeleteRow" |
| | | :dialogType="dialogType" |
| | | /> |
| | | </div> |
| | | |
| | |
| | | <div class="dialog-footer"> |
| | | <el-button |
| | | @click="handleClose" |
| | | v-if="dialogType === 'add' || dialogType === 'edit'" |
| | | >å æ¶ |
| | | >{{ dialogType === 'viewRow' ? 'å
³ é' : 'å æ¶' }} |
| | | </el-button |
| | | > |
| | | <!-- <el-button @click="handleReset" v-if="dialogType === 'edit'" |
| | | >é ç½®</el-button |
| | | > --> |
| | | <el-button type="primary" :loading="loading" @click="handleSubmit" |
| | | <el-button |
| | | v-if="dialogType !== 'viewRow'" |
| | | type="primary" |
| | | :loading="loading" |
| | | @click="handleSubmit" |
| | | >ç¡® å® |
| | | </el-button |
| | | > |
| | |
| | | dialogType.value = "add"; |
| | | }; |
| | | |
| | | const editInitialization = (data) => { |
| | | const editInitialization = (type,data) => { |
| | | copyForm.value = deepClone(data); |
| | | tableData.value = data.productionInventoryList || []; |
| | | detailsTableData.value = data.productionList || []; |
| | | dialogType.value = "edit"; |
| | | dialogType.value = type; |
| | | const existingOfficialIds = tableData.value |
| | | .map((item) => item.officialId) |
| | | .filter((id) => id); |
| | |
| | | for (let i = 0; i < tableData.value.length; i++) { |
| | | const element = tableData.value[i]; |
| | | if (element.usedQuantity == 0 || element.usedQuantity === null) { |
| | | ElMessage.warning(`请填åä½¿ç¨æ°é: ${element.coal}`); |
| | | ElMessage.warning(`请填åç产å å·¥ç
¤ç§çä½¿ç¨æ°é`); |
| | | return; |
| | | } |
| | | } |
| | |
| | | if (dialogRef.value) { |
| | | if (type === 'add') { |
| | | dialogRef.value.Initialization?.(); |
| | | } else if (type === 'edit' && rowData) { |
| | | dialogRef.value.editInitialization?.(rowData); |
| | | } else if ((type === 'edit' || type === 'viewRow') && rowData) { |
| | | dialogRef.value.editInitialization?.(type,rowData); |
| | | } |
| | | } |
| | | }; |
| | | |
| | | const viewRow = (type,rowData) => { |
| | | dialogType.value = type; |
| | | currentRowData.value = rowData; |
| | | dialogVisible.value = true; |
| | | openDialog('viewRow', rowData); |
| | | }; |
| | | // å
³éå¯¹è¯æ¡ |
| | | const closeDialog = () => { |
| | | dialogVisible.value = false; |
| | |
| | | // æ¹æ³ |
| | | openDialog, |
| | | closeDialog, |
| | | handleDialogSuccess |
| | | handleDialogSuccess, |
| | | viewRow |
| | | }; |
| | | } |
| | |
| | | <template> |
| | | <div class="production-container"> |
| | | <div> |
| | | <!-- æç´¢è¡¨å --> |
| | | <el-form :inline="true" :model="queryParams" class="search-form"> |
| | | <el-form-item label="æç´¢"> |
| | | <el-input |
| | | v-model="queryParams.searchAll" |
| | | placeholder="请è¾å
¥å
³é®è¯" |
| | | clearable |
| | | v-model="queryParams.searchAll" |
| | | placeholder="请è¾å
¥å
³é®è¯" |
| | | clearable |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item> |
| | |
| | | <el-button type="success" :icon="Plus" @click="openDialog('add')"> |
| | | æ°å¢å å·¥ |
| | | </el-button> |
| | | <el-button type="danger" :icon="Delete" :disabled="!selectedRows.length" @click="() => deleteSelected(delPM)"> |
| | | <el-button |
| | | type="danger" |
| | | :icon="Delete" |
| | | :disabled="!selectedRows.length" |
| | | @click="() => deleteSelected(delPM)" |
| | | > |
| | | å é¤ |
| | | </el-button> |
| | | </div> <!-- æ°æ®è¡¨æ ¼ --> |
| | | </div> |
| | | <!-- æ°æ®è¡¨æ ¼ --> |
| | | <ETable |
| | | :showOverflowTooltip="false" |
| | | :loading="loading" |
| | | :table-data="tableData" |
| | | :columns="columns" |
| | | :current-page="queryParams.current" |
| | | :page-size="queryParams.size" |
| | | @selection-change="handleSelectionChange" |
| | | @edit="row => openDialog('edit', row)" |
| | | :show-selection="true" |
| | | :border="true" |
| | | :maxHeight="480" |
| | | :showOverflowTooltip="false" |
| | | :loading="loading" |
| | | :table-data="tableData" |
| | | :columns="columns" |
| | | :current-page="queryParams.current" |
| | | :page-size="queryParams.size" |
| | | @selection-change="handleSelectionChange" |
| | | @edit="(row) => openDialog('edit', row)" |
| | | :show-selection="true" |
| | | :border="true" |
| | | @viewRow="(row) => (viewRow('viewRow', row))" |
| | | :operations="['edit', 'viewRow']" |
| | | :operationsWidth="200" |
| | | :show-overflow-tooltip="false" |
| | | style="width: 100%; height: calc(100vh - 26em)" |
| | | > |
| | | <template #coal="{ row }"> |
| | | <template #coalId="{ row }"> |
| | | <div class="coal-tags"> |
| | | <el-tag v-for="coal in parseCoalArray(row.coal)" :key="coal" size="small"> |
| | | {{ getCoalNameById(coal) }} |
| | | </el-tag> |
| | | <span v-if="!row.coal">--</span> |
| | | <template v-if="row.coalId"> |
| | | <el-tag |
| | | v-for="coal in parseCoalArray(row.coalId)" |
| | | :key="coal" |
| | | size="small" |
| | | type="primary" |
| | | class="coal-tag" |
| | | > |
| | | {{ getDisplayCoalName(coal) }} |
| | | </el-tag> |
| | | </template> |
| | | <span v-else class="no-data">--</span> |
| | | </div> |
| | | </template> |
| | | </ETable> <!-- å页ç»ä»¶ --> |
| | | </ETable> |
| | | <!-- å页ç»ä»¶ --> |
| | | <Pagination |
| | | :layout="'total, prev, pager, next, jumper'" |
| | | :total="total" |
| | | v-model:page="queryParams.current" |
| | | :limit="queryParams.size" |
| | | @pagination="handlePageChange" |
| | | :layout="'total, prev, pager, next, jumper'" |
| | | :total="total" |
| | | v-model:page="queryParams.current" |
| | | :limit="queryParams.size" |
| | | @pagination="handlePageChange" |
| | | /> |
| | | </el-card> |
| | | |
| | | <!-- çäº§å¯¹è¯æ¡ --> |
| | | <!-- handleProductionAndProcessing --> |
| | | <ProductionDialog |
| | | v-model:visible="dialogVisible" |
| | | ref="dialogRef" |
| | | :type="dialogType" |
| | | @update:productionAndProcessing="handleProductionAndProcessing" |
| | | @success="handleDialogSuccess" |
| | | v-model:visible="dialogVisible" |
| | | ref="dialogRef" |
| | | :type="dialogType" |
| | | @update:productionAndProcessing="handleProductionAndProcessing" |
| | | @success="handleDialogSuccess" |
| | | /> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import {onMounted} from "vue"; |
| | | import {ElMessage} from "element-plus"; |
| | | import {Plus, Delete} from "@element-plus/icons-vue"; |
| | | import { onMounted, ref } from "vue"; |
| | | import { ElMessage } from "element-plus"; |
| | | import { Plus, Delete } from "@element-plus/icons-vue"; |
| | | import ProductionDialog from "./components/ProductionDialog.vue"; |
| | | import ETable from "@/components/Table/ETable.vue"; |
| | | import Pagination from "@/components/Pagination/index.vue"; |
| | | import {getProductionMasterList, delPM} from "@/api/production"; |
| | | import {parseCoalArray} from "@/utils/production"; |
| | | import {useTableData} from "./components/useTableData.js"; |
| | | import {useDialog} from "./components/useDialog.js"; |
| | | import {useCoalData} from "./components/useCoalData.js"; |
| | | import { getProductionMasterList, delPM } from "@/api/production"; |
| | | import { parseCoalArray } from "@/utils/production"; |
| | | import { useTableData } from "./components/useTableData.js"; |
| | | import { useDialog } from "./components/useDialog.js"; |
| | | import { useCoalData } from "./components/useCoalData.js"; |
| | | import { getCoalInfoList } from "@/api/production"; |
| | | |
| | | // ç
¤ç§ä¿¡æ¯å表 |
| | | const coalInfoList = ref([]); |
| | | |
| | | // è¡¨æ ¼åé
ç½® |
| | | const columns = [ |
| | | {prop: "coal", label: "ç
¤ç§", minWidth: 150, slot: 'coal'}, |
| | | {prop: "productionQuantity", label: "ç产æ°é", minWidth: 120}, |
| | | {prop: "laborCost", label: "äººå·¥ææ¬", minWidth: 150}, |
| | | {prop: "energyConsumptionCost", label: "è½èææ¬", minWidth: 120}, |
| | | {prop: "equipmentDepreciation", label: "è®¾å¤ææ§", minWidth: 143}, |
| | | {prop: "totalCost", label: "æ»ææ¬", minWidth: 150}, |
| | | { prop: "coalId", label: "ç
¤ç§", minWidth: 150, slot: true }, |
| | | { prop: "productionQuantity", label: "ç产æ°é", minWidth: 120 }, |
| | | { prop: "laborCost", label: "äººå·¥ææ¬", minWidth: 150 }, |
| | | { prop: "energyConsumptionCost", label: "è½èææ¬", minWidth: 120 }, |
| | | { prop: "equipmentDepreciation", label: "è®¾å¤ææ§", minWidth: 143 }, |
| | | { prop: "totalCost", label: "æ»ææ¬", minWidth: 150 }, |
| | | ]; |
| | | |
| | | // 使ç¨è¡¨æ ¼æ°æ®ç»åå¼å½æ° |
| | |
| | | handleReset, |
| | | handlePageChange, |
| | | handleSelectionChange, |
| | | deleteSelected |
| | | } = useTableData(getProductionMasterList, {pageSize: 10}); |
| | | deleteSelected, |
| | | } = useTableData(getProductionMasterList, { pageSize: 10 }); |
| | | |
| | | // 使ç¨å¯¹è¯æ¡ç»åå¼å½æ° |
| | | const { |
| | |
| | | dialogType, |
| | | dialogRef, |
| | | openDialog, |
| | | handleDialogSuccess: onDialogSuccess |
| | | viewRow, |
| | | handleDialogSuccess: onDialogSuccess, |
| | | } = useDialog(); |
| | | |
| | | // 使ç¨ç
¤ç§æ°æ®ç»åå¼å½æ° |
| | | const {getCoalNameById, getCoalData} = useCoalData(); |
| | | const { getCoalNameById, getCoalData } = useCoalData(); |
| | | |
| | | // è·åç
¤ç§æ¾ç¤ºåç§°ï¼å¸¦å¤ç¨é»è¾ï¼ |
| | | const getDisplayCoalName = (coalId) => { |
| | | // ä¼å
ä½¿ç¨ useCoalData çæ¹æ³ |
| | | let name = getCoalNameById(coalId); |
| | | |
| | | // å¦ææ²¡ææ¾å°ï¼å°è¯ä» coalInfoList 䏿¥æ¾ |
| | | if (name === coalId && coalInfoList.value.length > 0) { |
| | | const found = coalInfoList.value.find((item) => item.id == coalId); |
| | | name = found ? found.coal : coalId; |
| | | } |
| | | |
| | | return name || coalId; |
| | | }; |
| | | |
| | | // å¤ççäº§æ°æ®æ´æ° |
| | | const handleProductionAndProcessing = (row, rows) => { |
| | | const index = tableData.value.findIndex(item => item.id === rows.id); |
| | | const index = tableData.value.findIndex((item) => item.id === rows.id); |
| | | if (index !== -1) { |
| | | tableData.value[index] = {...tableData.value[index], ...row}; |
| | | tableData.value[index] = { ...tableData.value[index], ...row }; |
| | | } |
| | | }; |
| | | |
| | |
| | | ElMessage.success("æä½æå"); |
| | | }); |
| | | }; |
| | | |
| | | // ç»ä»¶æè½½æ¶å è½½æ°æ® |
| | | onMounted(async () => { |
| | | await getCoalData(); // é¢å è½½ç
¤ç§æ°æ® |
| | | getList(); |
| | | try { |
| | | // å¹¶è¡å è½½ç
¤ç§æ°æ®åè¡¨æ ¼æ°æ® |
| | | await Promise.all([ |
| | | getCoalData(), // é¢å è½½ç
¤ç§æ°æ® |
| | | (async () => { |
| | | const res = await getCoalInfoList(); |
| | | if (res.code === 200) { |
| | | coalInfoList.value = res.data; |
| | | } |
| | | })(), |
| | | ]); |
| | | |
| | | // å è½½è¡¨æ ¼æ°æ® |
| | | getList(); |
| | | } catch (error) { |
| | | ElMessage.error("æ°æ®å 载失败ï¼è¯·å·æ°é¡µé¢éè¯"); |
| | | } |
| | | }); |
| | | </script> |
| | | |
| | |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | gap: 4px; |
| | | align-items: center; |
| | | |
| | | .el-tag { |
| | | .coal-tag { |
| | | margin-right: 4px; |
| | | margin-bottom: 4px; |
| | | |
| | |
| | | margin-right: 0; |
| | | } |
| | | } |
| | | |
| | | .no-data { |
| | | color: #999; |
| | | font-style: italic; |
| | | } |
| | | } |
| | | </style> |
| | |
| | | <el-select v-model="form.customerId" placeholder="è¯·éæ©å®¢æ·"> |
| | | <el-option |
| | | v-for="item in customerOptions" |
| | | :key="item.id" |
| | | :label="item.customerName" |
| | | :value="item.id" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="åä»·(å«ç¨)" prop="priceIncludingTax"> |
| | | <el-form-item label="åä»·(å«ç¨)" prop="priceIncludingTax" @change="mathProfit"> |
| | | <el-input v-model="form.priceIncludingTax" placeholder="请è¾å
¥éå®åä»·(å«ç¨)" maxlength="30" type="number" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="é宿°é" prop="saleQuantity"> |
| | | <el-form-item label="é宿°é" prop="saleQuantity" @change="mathProfit"> |
| | | <el-input v-model="form.saleQuantity" placeholder="请è¾å
¥é宿°é" maxlength="30" type="number" /> |
| | | </el-form-item> |
| | | </el-col> |
| | |
| | | |
| | | <script setup> |
| | | import {reactive, ref} from "vue"; |
| | | import {addOrEditSalesRecord, customerList, officialList} from "../../../api/salesOutbound/index.js"; |
| | | import {addOrEditSalesRecord, customerList, officialList} from "@/api/salesOutbound/index.js"; |
| | | import useUserStore from '@/store/modules/user' |
| | | |
| | | const { proxy } = getCurrentInstance() |
| | |
| | | const openDialog = async (type, row) => { |
| | | dialogVisitable.value = true |
| | | form.value.saleDate = proxy.getCurrentDate() |
| | | customerList().then((res) => { |
| | | customerOptions.value = res.data |
| | | }) |
| | | officialList().then((res) => { |
| | | coalOptions.value = res.data |
| | | }) |
| | | const [supplyRes, coalRes] = await Promise.all([ |
| | | customerList(), |
| | | officialList(), |
| | | ]); |
| | | let supplyData = supplyRes.data; |
| | | coalOptions.value = coalRes.data; |
| | | customerOptions.value = supplyData.map((item) => ({ |
| | | value: item.id, |
| | | label: item.customerName, |
| | | })); |
| | | let res = await userStore.getInfo() |
| | | form.value.registrantId = res.user.userId |
| | | form.value.taxCoal = 13 |
| | |
| | | @selection-change="handleSelectionChange" |
| | | :show-selection="true" |
| | | :border="true" |
| | | :maxHeight="480" |
| | | style="width: 100%;height: calc(100vh - 30em)" |
| | | @edit="openDia"></ETable> |
| | | </div> |
| | | <pagination |
| | |
| | | <el-button type="success" plain :icon="Refresh" v-if="activeTab=== 'officialInventory'" @click="mergeRows('merge')">åå¹¶</el-button> |
| | | </el-space> |
| | | <div> |
| | | <el-table :data="tableData" border @selection-change="selectionChange" style="width: 100%" show-summary :summary-method="summarizeChildrenTable"> |
| | | <el-table :data="tableData" border @selection-change="selectionChange" style="width: 100%;height: calc(100vh - 30em)" show-summary :summary-method="summarizeChildrenTable"> |
| | | <el-table-column type="selection" width="55" align="center" /> |
| | | <el-table-column label="åºå·" type="index" width="60" align="center" /> |
| | | <el-table-column prop="supplierName" label="ä¾è´§ååç§°" width="180" sortable/> |
| | |
| | | <el-table-column prop="totalPriceIncludingTax" label="æ»ä»·(å«ç¨)" width="130" /> |
| | | <el-table-column prop="priceExcludingTax" label="åä»·(ä¸å«ç¨)" width="130" /> |
| | | <el-table-column prop="totalPriceExcludingTax" label="æ»ä»·(ä¸å«ç¨)" width="130" /> |
| | | <el-table-column prop="pendingReplenishment" label="å¾
è¡¥åº" width="130" /> |
| | | <el-table-column prop="pendingReplenishment" label="å¾
è¡¥åº" width="130" v-if="activeTab=== 'officialInventory'"/> |
| | | <el-table-column label="ç
¤è´¨" align="center" v-if="activeTab=== 'officialInventory'" width="600"> |
| | | <el-table-column v-for="col in columnTitle" :key="col.prop" :prop="col.prop" :label="col.label" align="center" sortable min-width="200"/> |
| | | </el-table-column> |
| | | <el-table-column prop="registrantId" label="ç»è®°äºº" width="180"/> |
| | | <el-table-column prop="registrant" label="ç»è®°äºº" width="180"/> |
| | | <el-table-column prop="registrationDate" label="ç»è®°æ¥æ" width="180"/> |
| | | <el-table-column fixed="right" label="æä½" min-width="60" align="center"> |
| | | <template #default="scope"> |
| | |
| | | <el-form :model="form" :rules="rules" ref="formRef" label-width="180px"> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ä¾è´§ååç§°" prop="supplierName"> |
| | | <el-input v-model="form.supplierName" placeholder="请è¾å
¥ä¾è´§ååç§°" maxlength="30" /> |
| | | <el-form-item label="ä¾åºååç§°" prop="supplierId"> |
| | | <el-select v-model="form.supplierId" placeholder="è¯·éæ©ä¾åºå"> |
| | | <el-option :label="item.label" v-for="item in supplyList" :key="item.value" :value="item.value"/> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ç
¤ç§" prop="coal"> |
| | | <el-input v-model="form.coal" placeholder="请è¾å
¥ç
¤ç§" maxlength="30" /> |
| | | <el-form-item label="ç
¤ç§" prop="coalId"> |
| | | <el-select v-model="form.coalId" placeholder="è¯·éæ©ç
¤ç§"> |
| | | <el-option :label="item.label" v-for="item in coalList" :key="item.value" :value="item.value"/> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | |
| | | <el-form :model="mergeForm" :rules="mergeRules" ref="mergeRef" label-width="100px"> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ä¾è´§ååç§°" prop="supplierName"> |
| | | <el-input v-model="mergeForm.supplierName" placeholder="请è¾å
¥ä¾è´§ååç§°" maxlength="30" /> |
| | | <el-form-item label="ä¾åºååç§°" prop="supplierId"> |
| | | <el-select v-model="mergeForm.supplierId" placeholder="è¯·éæ©ä¾åºå"> |
| | | <el-option :label="item.label" v-for="item in supplyList" :key="item.value" :value="item.value"/> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ç
¤ç§" prop="coal"> |
| | | <el-input v-model="mergeForm.coal" placeholder="请è¾å
¥ç
¤ç§" maxlength="30" /> |
| | | <el-form-item label="ç
¤ç§" prop="coalId"> |
| | | <el-select v-model="mergeForm.coalId" placeholder="è¯·éæ©ç
¤ç§"> |
| | | <el-option :label="item.label" v-for="item in coalList" :key="item.value" :value="item.value"/> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | |
| | | pendingInventoryList |
| | | } from "@/api/warehouseManagement/index.js"; |
| | | import {editOfficial, merge} from "../../api/warehouseManagement/index.js"; |
| | | import {getSupplyList} from "@/api/procureMent/index.js"; |
| | | import {getCoalInfoList} from "@/api/production/index.js"; |
| | | |
| | | const { proxy } = getCurrentInstance() |
| | | |
| | |
| | | pId: '', |
| | | }, |
| | | mergeForm: { |
| | | supplierName: '', |
| | | coal: '', |
| | | supplierId: '', |
| | | coalId: '', |
| | | unit: '', |
| | | inventoryQuantity: '', |
| | | priceIncludingTax: '', |
| | |
| | | coal: "", |
| | | }) |
| | | const columnTitle = ref([]) |
| | | const supplyList = ref([]); |
| | | const coalList = ref([]); |
| | | |
| | | // è·åä¾åºå䏿åç
¤ç§ä¸æ |
| | | const getDropdownData = async () => { |
| | | try { |
| | | const [supplyRes, coalRes] = await Promise.all([ |
| | | getSupplyList(), |
| | | getCoalInfoList(), |
| | | ]); |
| | | let supplyData = supplyRes.data; |
| | | let coalData = coalRes.data; |
| | | supplyList.value = supplyData.map((item) => ({ |
| | | value: item.id, |
| | | label: item.supplierName, |
| | | })); |
| | | coalList.value = coalData.map((item) => ({ |
| | | value: item.id, |
| | | label: item.coal, |
| | | })); |
| | | } catch (error) { |
| | | ElMessage.error("è·åä¸ææ°æ®å¤±è´¥ï¼è¯·ç¨åéè¯"); |
| | | } |
| | | }; |
| | | defineExpose({ |
| | | getDropdownData, |
| | | }); |
| | | onMounted(() => { |
| | | handleTabClick({ props: { name: "pendingInbound" } }); |
| | | }); |
| | |
| | | form.value = {...row} |
| | | form.value.pId = row.id |
| | | inventoryQuantity.value = row.inventoryQuantity |
| | | getDropdownData() |
| | | coalPlanListOptions() |
| | | } |
| | | // æ¥è¯¢ç
¤è´¨æ¹æ¡ä¸ææ¡ |