| ¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from "@/utils/request"; |
| | | |
| | | // å·¥åºç»å®ç产记å½å页æ¥è¯¢ |
| | | export function listPage(query) { |
| | | return request({ |
| | | url: "/productProcessParameter/listPage", |
| | | method: "get", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | // æ°å¢å·¥åºç产记å½å
³èï¼æ¯ææ¹éï¼ |
| | | // processId æ¾å¨è·¯å¾éï¼body ç´æ¥ä¼ éä¸ççäº§è®°å½æ°ç» |
| | | export function addProductProcessParameter(processId, data) { |
| | | return request({ |
| | | url: `/productProcessParameter/addProductProcessParameter/${processId}`, |
| | | method: "post", |
| | | data, |
| | | }); |
| | | } |
| | | |
| | | // å é¤ï¼æ¯ææ¹é ids æ°ç»ï¼ |
| | | export function del(ids) { |
| | | const idStr = Array.isArray(ids) ? ids.join(",") : ids; |
| | | return request({ |
| | | url: `/productProcessParameter/${idStr}`, |
| | | method: "delete", |
| | | }); |
| | | } |
| | | |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | // ç产记å½ï¼åæ°ï¼æ¥å£ |
| | | import request from "@/utils/request"; |
| | | |
| | | // å页æ¥è¯¢ |
| | | export function listPage(query) { |
| | | return request({ |
| | | url: "/productParameter/listPage", |
| | | method: "get", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | // æ°å¢ |
| | | export function add(data) { |
| | | return request({ |
| | | url: "/productParameter/addProductParameter", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | // ä¿®æ¹ |
| | | export function update(data) { |
| | | return request({ |
| | | url: "/productParameter/updProductParameter", |
| | | method: "put", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | // å é¤ ids 为æ°ç»æ¶ä¼æ¼æ productParameter/1,2,3 |
| | | export function del(ids) { |
| | | const idStr = Array.isArray(ids) ? ids.join(",") : ids; |
| | | return request({ |
| | | url: `/productParameter/${idStr}`, |
| | | method: "delete", |
| | | }); |
| | | } |
| | |
| | | type="selection" |
| | | width="55" |
| | | v-if="isSelection" |
| | | :selectable="rowSelectable" |
| | | /> |
| | | <el-table-column align="center" label="åºå·" type="index" width="60" /> |
| | | |
| | |
| | | }, |
| | | }); |
| | | |
| | | // éæ©æ¡ç¦ç¨æ§å¶ï¼è¡å¯¹è±¡ä¸å¦ææ disabled === trueï¼åä¸å
许éä¸ |
| | | const rowSelectable = (row, index) => { |
| | | return !row.disabled; |
| | | }; |
| | | |
| | | // Data |
| | | const uploadRefs = ref([]); |
| | | const currentFiles = ref({}); |
| | |
| | | :value="item.id" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item |
| | | label="ç产æ¹å·" |
| | | prop="lotNo" |
| | | > |
| | | <el-input v-model="formState.lotNo" placeholder="请è¾å
¥ç产æ¹å·" /> |
| | | </el-form-item> |
| | | |
| | | <el-form-item |
| | | label="ä¼å
级" |
| | | prop="priority" |
| | | :rules="[ |
| | | { |
| | | required: true, |
| | | message: 'è¯·éæ©ä¼å
级', |
| | | trigger: 'change', |
| | | }, |
| | | ]" |
| | | > |
| | | <el-select v-model="formState.priority" placeholder="è¯·éæ©ä¼å
级" style="width: 100%;" clearable> |
| | | <el-option |
| | | v-for="dict in priority_type" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | |
| | | <el-form-item |
| | | label="éæ±æ°é" |
| | |
| | | > |
| | | <el-input-number v-model="formState.quantity" :step="1" :min="1" style="width: 100%" /> |
| | | </el-form-item> |
| | | |
| | | </el-form> |
| | | |
| | | <!-- 产åéæ©å¼¹çª --> |
| | |
| | | productName: "", |
| | | productModelName: "", |
| | | unit: "", |
| | | priority: undefined, |
| | | quantity: 0, |
| | | lotNo: "", |
| | | }); |
| | | |
| | | const isShow = computed({ |
| | |
| | | |
| | | const showProductSelectDialog = ref(false); |
| | | |
| | | let { proxy } = getCurrentInstance() |
| | | let { proxy } = getCurrentInstance(); |
| | | const { priority_type } = proxy.useDict("priority_type"); |
| | | |
| | | if (priority_type.value && priority_type.value.length > 0) { |
| | | formState.value.priority = priority_type.value[2].value; |
| | | } |
| | | |
| | | const closeModal = () => { |
| | | // éç½®è¡¨åæ°æ® |
| | |
| | | routeId: undefined, |
| | | productName: "", |
| | | productModelName: "", |
| | | unit: "", |
| | | priority: priority_type.value && priority_type.value.length > 0 ? priority_type.value[2].value : undefined, |
| | | quantity: '', |
| | | lotNo: "", |
| | | }; |
| | | isShow.value = false; |
| | | }; |
| | |
| | | <!-- ç产订å --> |
| | | <template> |
| | | <div class="app-container"> |
| | | <div class="search_form"> |
| | |
| | | const NewProductOrder = defineAsyncComponent(() => import("@/views/productionManagement/productionOrder/New.vue")); |
| | | |
| | | const { proxy } = getCurrentInstance(); |
| | | const { priority_type } = proxy.useDict("priority_type"); |
| | | |
| | | const router = useRouter(); |
| | | const isShowNewModal = ref(false); |
| | | |
| | | const tableColumn = ref([ |
| | | { |
| | | label: "ä¼å
级", |
| | | prop: "priority", |
| | | width: '100px', |
| | | dataType: "tag", |
| | | formatData: val => proxy.selectDictLabel(priority_type.value, val), |
| | | formatType: val => { |
| | | const v = Number(val); |
| | | if (v === 0) return "danger"; // çº¢è² |
| | | if (v === 1) return "warning"; // é»è² |
| | | if (v === 2) return "success"; // ç»¿è² |
| | | return ""; |
| | | }, |
| | | }, |
| | | { |
| | | label: "ç产æ¹å·", |
| | | prop: "lotNo", |
| | | width: '120px', |
| | | }, |
| | | { |
| | | label: "ç产订åå·", |
| | | prop: "npsNo", |
| | | width: '120px', |
| | |
| | | <el-form-item label="å·¥èµå®é¢" prop="salaryQuota"> |
| | | <el-input v-model="formState.salaryQuota" type="number" :step="0.001" /> |
| | | </el-form-item> |
| | | <el-form-item label="åæ ¼ç" prop="qualifiedRate"> |
| | | <el-input v-model="formState.qualifiedRate" type="number" :step="0.01" /> |
| | | </el-form-item> |
| | | <el-form-item label="æ¯å¦è´¨æ£" prop="isQuality"> |
| | | <el-switch v-model="formState.isQuality" :active-value="true" inactive-value="false"/> |
| | | </el-form-item> |
| | |
| | | no: props.record.no, |
| | | remark: props.record.remark, |
| | | salaryQuota: props.record.salaryQuota, |
| | | qualifiedRate: props.record.qualifiedRate, |
| | | isQuality: props.record.isQuality, |
| | | }); |
| | | |
| | |
| | | no: newRecord.no || '', |
| | | remark: newRecord.remark || '', |
| | | salaryQuota: newRecord.salaryQuota || '', |
| | | isQuality: props.record.isQuality, |
| | | qualifiedRate: newRecord.qualifiedRate || '', |
| | | isQuality: newRecord.isQuality, |
| | | }; |
| | | } |
| | | }, { immediate: true, deep: true }); |
| | |
| | | no: props.record.no || '', |
| | | remark: props.record.remark || '', |
| | | salaryQuota: props.record.salaryQuota || '', |
| | | qualifiedRate: props.record.qualifiedRate || '', |
| | | isQuality: props.record.isQuality, |
| | | }; |
| | | } |
| | |
| | | <el-form-item label="å·¥èµå®é¢" prop="salaryQuota"> |
| | | <el-input v-model="formState.salaryQuota" type="number" :step="0.001" /> |
| | | </el-form-item> |
| | | <el-form-item label="åæ ¼ç" prop="qualifiedRate"> |
| | | <el-input v-model="formState.qualifiedRate" type="number" :step="0.01" /> |
| | | </el-form-item> |
| | | <el-form-item label="æ¯å¦è´¨æ£" prop="isQuality"> |
| | | <el-switch v-model="formState.isQuality" :active-value="true" inactive-value="false"/> |
| | | </el-form-item> |
| | |
| | | name: '', |
| | | remark: '', |
| | | salaryQuota: '', |
| | | qualifiedRate: '', |
| | | isQuality: false, |
| | | }); |
| | | |
| | |
| | | @pagination="pagination" |
| | | :total="page.total"></PIMTable> |
| | | </div> |
| | | |
| | | <!-- å·¥åºç产记å½åè¡¨å¼¹æ¡ --> |
| | | <el-dialog v-model="isShowProcessParamModal" |
| | | title="ç产记å½" |
| | | width="800px"> |
| | | <div style="text-align: right" |
| | | class="mb10"> |
| | | <el-button type="primary" |
| | | @click="showSelectProductParamModal">æ°å¢</el-button> |
| | | <el-button type="danger" |
| | | plain |
| | | @click="handleDeleteProcessParam" |
| | | :disabled="processParamSelectedRows.length === 0">æ¹éå é¤</el-button> |
| | | </div> |
| | | <PIMTable rowKey="id" |
| | | :column="processParamColumns" |
| | | :tableData="processParamTableData" |
| | | :page="processParamPage" |
| | | :isSelection="true" |
| | | @selection-change="handleProcessParamSelectionChange" |
| | | @pagination="processParamPagination" |
| | | :total="processParamPage.total"></PIMTable> |
| | | </el-dialog> |
| | | |
| | | <!-- éæ©ç产记å½å¼¹æ¡ --> |
| | | <el-dialog v-model="isShowSelectParamModal" |
| | | title="éæ©ç产记å½" |
| | | width="800px"> |
| | | <PIMTable rowKey="id" |
| | | :column="productParamColumns" |
| | | :tableData="productParamTableData" |
| | | :page="productParamPage" |
| | | :isSelection="true" |
| | | @selection-change="handleProductParamSelectionChange" |
| | | @pagination="productParamPagination" |
| | | :total="productParamPage.total"></PIMTable> |
| | | <template #footer> |
| | | <div class="dialog-footer"> |
| | | <el-button type="primary" |
| | | @click="handleAddProcessParam">ç¡®å®</el-button> |
| | | <el-button @click="isShowSelectParamModal = false">åæ¶</el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | | <new-process v-if="isShowNewModal" |
| | | v-model:visible="isShowNewModal" |
| | | @completed="getList" /> |
| | |
| | | importData, |
| | | downloadTemplate, |
| | | } from "@/api/productionManagement/productionProcess.js"; |
| | | import { |
| | | listPage as listProcessParamPage, |
| | | del as delProcessParam, |
| | | addProductProcessParameter, |
| | | } from "@/api/productionManagement/productProcessParameter.js"; |
| | | import { listPage as listProductParamPage } from "@/api/productionManagement/productionRecords.js"; |
| | | import { getToken } from "@/utils/auth"; |
| | | |
| | | const data = reactive({ |
| | |
| | | { |
| | | label: "å·¥èµå®é¢", |
| | | prop: "salaryQuota", |
| | | }, |
| | | { |
| | | label: "åæ ¼ç", |
| | | prop: "qualifiedRate", |
| | | }, |
| | | { |
| | | label: "æ¯å¦è´¨æ£", |
| | |
| | | width: 280, |
| | | operation: [ |
| | | { |
| | | name: "æ¥ç", |
| | | type: "text", |
| | | clickFun: row => { |
| | | showProcessParamModal(row); |
| | | }, |
| | | }, |
| | | { |
| | | name: "ç¼è¾", |
| | | type: "text", |
| | | clickFun: row => { |
| | |
| | | ], |
| | | }, |
| | | ]); |
| | | // å·¥åºå·²ç»å®çç产记å½å表åé
ç½® |
| | | const processParamColumns = ref([ |
| | | { label: "åæ°ç¼ç ", prop: "code" }, |
| | | { label: "忰项", prop: "parameterItem" }, |
| | | { |
| | | label: "åæ°ç±»å", |
| | | prop: "type", |
| | | formatData: val => { |
| | | const dictList = (proxy.useDict && proxy.useDict("parameter_tyep")?.parameter_tyep) || []; |
| | | const list = dictList.value || dictList; |
| | | const hit = (list || []).find(d => d.value === val); |
| | | return hit ? hit.label : val; |
| | | }, |
| | | }, |
| | | { label: "åä½", prop: "unit" }, |
| | | { label: "åæ°æ ¼å¼", prop: "parameterFormat" }, |
| | | { |
| | | label: "æ¯å¦å¿
å¡«", |
| | | prop: "isRequired", |
| | | formatData: v => (v === "1" || v === 1 ? "æ¯" : "å¦"), |
| | | }, |
| | | ]); |
| | | // å¯éæ©çç产记å½å表åé
ç½® |
| | | const productParamColumns = ref([ |
| | | { label: "åæ°ç¼ç ", prop: "code" }, |
| | | { label: "忰项", prop: "parameterItem" }, |
| | | { |
| | | label: "åæ°ç±»å", |
| | | prop: "type", |
| | | formatData: val => { |
| | | const dictList = (proxy.useDict && proxy.useDict("parameter_tyep")?.parameter_tyep) || []; |
| | | const list = dictList.value || dictList; |
| | | const hit = (list || []).find(d => d.value === val); |
| | | return hit ? hit.label : val; |
| | | }, |
| | | }, |
| | | { label: "åä½", prop: "unit" }, |
| | | { label: "åæ°æ ¼å¼", prop: "parameterFormat" }, |
| | | { |
| | | label: "æ¯å¦å¿
å¡«", |
| | | prop: "isRequired", |
| | | formatData: v => (v === "1" || v === 1 ? "æ¯" : "å¦"), |
| | | }, |
| | | ]); |
| | | const tableData = ref([]); |
| | | const selectedRows = ref([]); |
| | | const tableLoading = ref(false); |
| | | const isShowNewModal = ref(false); |
| | | const isShowEditModal = ref(false); |
| | | const isShowProcessParamModal = ref(false); |
| | | const isShowSelectParamModal = ref(false); |
| | | const record = ref({}); |
| | | const currentProcess = ref(null); |
| | | const importDialogVisible = ref(false); |
| | | const importDialogRef = ref(null); |
| | | const page = reactive({ |
| | |
| | | size: 100, |
| | | total: 0, |
| | | }); |
| | | const processParamPage = reactive({ |
| | | current: 1, |
| | | size: 100, |
| | | total: 0, |
| | | }); |
| | | const productParamPage = reactive({ |
| | | current: 1, |
| | | size: 100, |
| | | total: 0, |
| | | }); |
| | | const processParamTableData = ref([]); |
| | | const productParamTableData = ref([]); |
| | | const processParamSelectedRows = ref([]); |
| | | const productParamSelectedRows = ref([]); |
| | | const { proxy } = getCurrentInstance(); |
| | | |
| | | // 导å
¥ç¸å
³é
ç½® |
| | |
| | | page.current = obj.page; |
| | | page.size = obj.limit; |
| | | getList(); |
| | | }; |
| | | const processParamPagination = obj => { |
| | | processParamPage.current = obj.page; |
| | | processParamPage.size = obj.limit; |
| | | getProcessParamList(); |
| | | }; |
| | | const productParamPagination = obj => { |
| | | productParamPage.current = obj.page; |
| | | productParamPage.size = obj.limit; |
| | | getProductParamList(); |
| | | }; |
| | | const getList = () => { |
| | | tableLoading.value = true; |
| | |
| | | selectedRows.value = selection; |
| | | }; |
| | | |
| | | const handleProcessParamSelectionChange = selection => { |
| | | processParamSelectedRows.value = selection; |
| | | }; |
| | | |
| | | const handleProductParamSelectionChange = selection => { |
| | | productParamSelectedRows.value = selection; |
| | | }; |
| | | |
| | | // æå¼æ°å¢å¼¹æ¡ |
| | | const showNewModal = () => { |
| | | isShowNewModal.value = true; |
| | |
| | | record.value = row; |
| | | }; |
| | | |
| | | // æ¥çå½åå·¥åºççäº§è®°å½ |
| | | const showProcessParamModal = row => { |
| | | currentProcess.value = row; |
| | | isShowProcessParamModal.value = true; |
| | | processParamPage.current = 1; |
| | | getProcessParamList(); |
| | | }; |
| | | |
| | | const getProcessParamList = () => { |
| | | if (!currentProcess.value) return; |
| | | const params = { |
| | | processId: currentProcess.value.id, |
| | | ...processParamPage, |
| | | }; |
| | | listProcessParamPage(params).then(res => { |
| | | processParamTableData.value = res.data.records || []; |
| | | processParamPage.total = res.data.total || 0; |
| | | }); |
| | | }; |
| | | |
| | | // å é¤å½åå·¥åºç»å®ççäº§è®°å½ |
| | | const handleDeleteProcessParam = () => { |
| | | const ids = processParamSelectedRows.value.map(item => item.id); |
| | | if (!ids.length) { |
| | | proxy.$modal.msgWarning("è¯·éæ©è¦å é¤çè®°å½"); |
| | | return; |
| | | } |
| | | proxy.$modal |
| | | .confirm("æ¯å¦ç¡®è®¤å é¤éä¸çç产记å½ï¼") |
| | | .then(() => delProcessParam(ids)) |
| | | .then(() => { |
| | | proxy.$modal.msgSuccess("å 餿å"); |
| | | getProcessParamList(); |
| | | }) |
| | | .catch(() => {}); |
| | | }; |
| | | |
| | | // æå¼éæ©ç产记å½å¼¹æ¡ |
| | | const showSelectProductParamModal = () => { |
| | | isShowSelectParamModal.value = true; |
| | | productParamPage.current = 1; |
| | | getProductParamList(); |
| | | }; |
| | | |
| | | const getProductParamList = () => { |
| | | const params = { |
| | | ...productParamPage, |
| | | }; |
| | | listProductParamPage(params).then(res => { |
| | | const records = res.data.records || []; |
| | | // å·²ç»å®å°å½åå·¥åºçç产记å½ï¼ä¸å
è®¸åæ¬¡éæ© -> æ ¹æ®åæ°ç¼ç æä¸ disabled æ è®° |
| | | const boundCodeSet = new Set( |
| | | (processParamTableData.value || []) |
| | | .map(item => item.code ?? item.parameterCode) |
| | | .filter(code => !!code) |
| | | ); |
| | | productParamTableData.value = records.map(item => ({ |
| | | ...item, |
| | | disabled: item.code ? boundCodeSet.has(item.code) : false, |
| | | })); |
| | | productParamPage.total = res.data.total || 0; |
| | | }); |
| | | }; |
| | | |
| | | // 确认ç»å½åå·¥åºæ°å¢çäº§è®°å½ |
| | | const handleAddProcessParam = () => { |
| | | if (!currentProcess.value) return; |
| | | const selectedList = productParamSelectedRows.value || []; |
| | | if (!selectedList.length) { |
| | | proxy.$modal.msgWarning("è¯·éæ©è¦ç»å®çç产记å½"); |
| | | return; |
| | | } |
| | | // processId æ¾å¨è·¯å¾éï¼body ç´æ¥ä¼ éä¸ççäº§è®°å½æ°ç» |
| | | addProductProcessParameter(currentProcess.value.id, selectedList) |
| | | .then(() => { |
| | | proxy.$modal.msgSuccess("æ°å¢æå"); |
| | | isShowSelectParamModal.value = false; |
| | | getProcessParamList(); |
| | | }) |
| | | .catch(() => {}); |
| | | }; |
| | | |
| | | // å é¤ |
| | | function handleDelete() { |
| | | const no = selectedRows.value.map(item => item.no); |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <el-dialog |
| | | v-model="isShow" |
| | | title="ç¼è¾ç产记å½" |
| | | width="520px" |
| | | @close="closeModal" |
| | | > |
| | | <el-form |
| | | ref="formRef" |
| | | label-width="120px" |
| | | :model="formState" |
| | | label-position="top" |
| | | > |
| | | <el-form-item |
| | | label="忰项" |
| | | prop="parameterItem" |
| | | :rules="[{ required: true, message: '请è¾å
¥åæ°é¡¹' }]" |
| | | > |
| | | <el-input v-model="formState.parameterItem" placeholder="请è¾å
¥åæ°é¡¹" /> |
| | | </el-form-item> |
| | | <el-form-item |
| | | label="åæ°ç±»å" |
| | | prop="type" |
| | | :rules="[{ required: true, message: 'è¯·éæ©åæ°ç±»å' }]" |
| | | > |
| | | <el-select v-model="formState.type" placeholder="è¯·éæ©åæ°ç±»å" style="width: 100%;"> |
| | | <el-option |
| | | v-for="dict in parameter_tyep" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item |
| | | label="åä½" |
| | | prop="unit" |
| | | :rules="[{ required: true, message: '请è¾å
¥åä½' }]" |
| | | > |
| | | <el-input v-model="formState.unit" placeholder="请è¾å
¥åä½" /> |
| | | </el-form-item> |
| | | <el-form-item label="åæ°æ ¼å¼" prop="parameterFormat"> |
| | | <el-input v-model="formState.parameterFormat" placeholder="请è¾å
¥åæ°æ ¼å¼ï¼éå¡«ï¼" /> |
| | | </el-form-item> |
| | | <el-form-item |
| | | label="æ¯å¦å¿
å¡«" |
| | | prop="isRequired" |
| | | :rules="[{ required: true, message: 'è¯·éæ©æ¯å¦å¿
å¡«' }]" |
| | | > |
| | | <el-select v-model="formState.isRequired" placeholder="è¯·éæ©" style="width: 100%;"> |
| | | <el-option label="æ¯" value="1" /> |
| | | <el-option label="å¦" value="0" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-form> |
| | | <template #footer> |
| | | <div class="dialog-footer"> |
| | | <el-button type="primary" @click="handleSubmit">确认</el-button> |
| | | <el-button @click="closeModal">åæ¶</el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { ref, computed, getCurrentInstance, watch } from "vue"; |
| | | import { update } from "@/api/productionManagement/productionRecords.js"; |
| | | |
| | | const props = defineProps({ |
| | | visible: { |
| | | type: Boolean, |
| | | required: true, |
| | | }, |
| | | record: { |
| | | type: Object, |
| | | default: () => ({}), |
| | | }, |
| | | }); |
| | | |
| | | const emit = defineEmits(["update:visible", "completed"]); |
| | | |
| | | const formRef = ref(null); |
| | | const formState = ref({ |
| | | id: undefined, |
| | | code: "", |
| | | parameterItem: "", |
| | | type: "", |
| | | unit: "", |
| | | parameterFormat: "", |
| | | isRequired: undefined, |
| | | }); |
| | | |
| | | const isShow = computed({ |
| | | get() { |
| | | return props.visible; |
| | | }, |
| | | set(val) { |
| | | emit("update:visible", val); |
| | | }, |
| | | }); |
| | | |
| | | // åæ¾ï¼çå¬ record åå |
| | | watch( |
| | | () => props.record, |
| | | (newRecord) => { |
| | | if (newRecord && Object.keys(newRecord).length) { |
| | | formState.value = { |
| | | id: newRecord.id, |
| | | code: newRecord.code ?? "", |
| | | parameterItem: newRecord.parameterItem ?? "", |
| | | type: newRecord.type ?? "", |
| | | unit: newRecord.unit ?? "", |
| | | parameterFormat: newRecord.parameterFormat ?? "", |
| | | isRequired: newRecord.isRequired, |
| | | }; |
| | | } |
| | | }, |
| | | { immediate: true, deep: true } |
| | | ); |
| | | |
| | | // å¼¹çªæå¼æ¶éæ°åæ¾ |
| | | watch( |
| | | () => props.visible, |
| | | (visible) => { |
| | | if (visible && props.record && Object.keys(props.record).length) { |
| | | formState.value = { |
| | | id: props.record.id, |
| | | code: props.record.code ?? "", |
| | | parameterItem: props.record.parameterItem ?? "", |
| | | type: props.record.type ?? "", |
| | | unit: props.record.unit ?? "", |
| | | parameterFormat: props.record.parameterFormat ?? "", |
| | | isRequired: props.record.isRequired, |
| | | }; |
| | | } |
| | | } |
| | | ); |
| | | |
| | | const { proxy } = getCurrentInstance(); |
| | | const { parameter_tyep } = proxy.useDict("parameter_tyep"); |
| | | |
| | | const closeModal = () => { |
| | | isShow.value = false; |
| | | }; |
| | | |
| | | const handleSubmit = () => { |
| | | formRef.value.validate((valid) => { |
| | | if (valid) { |
| | | update(formState.value).then(() => { |
| | | isShow.value = false; |
| | | emit("completed"); |
| | | proxy.$modal.msgSuccess("ä¿®æ¹æå"); |
| | | }); |
| | | } |
| | | }); |
| | | }; |
| | | |
| | | defineExpose({ |
| | | closeModal, |
| | | handleSubmit, |
| | | isShow, |
| | | }); |
| | | </script> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <el-dialog |
| | | v-model="isShow" |
| | | title="æ°å¢ç产记å½" |
| | | width="520px" |
| | | @close="closeModal" |
| | | > |
| | | <el-form |
| | | ref="formRef" |
| | | label-width="120px" |
| | | :model="formState" |
| | | label-position="top" |
| | | > |
| | | <el-form-item |
| | | label="忰项" |
| | | prop="parameterItem" |
| | | :rules="[{ required: true, message: '请è¾å
¥åæ°é¡¹' }]" |
| | | > |
| | | <el-input v-model="formState.parameterItem" placeholder="请è¾å
¥åæ°é¡¹" /> |
| | | </el-form-item> |
| | | <el-form-item |
| | | label="åæ°ç±»å" |
| | | prop="type" |
| | | :rules="[{ required: true, message: 'è¯·éæ©åæ°ç±»å' }]" |
| | | > |
| | | <el-select v-model="formState.type" placeholder="è¯·éæ©åæ°ç±»å" style="width: 100%;"> |
| | | <el-option |
| | | v-for="dict in parameter_tyep" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item |
| | | label="åä½" |
| | | prop="unit" |
| | | :rules="[{ required: true, message: '请è¾å
¥åä½' }]" |
| | | > |
| | | <el-input v-model="formState.unit" placeholder="请è¾å
¥åä½" /> |
| | | </el-form-item> |
| | | <el-form-item label="åæ°æ ¼å¼" prop="parameterFormat"> |
| | | <el-input v-model="formState.parameterFormat" placeholder="请è¾å
¥åæ°æ ¼å¼ï¼éå¡«ï¼" /> |
| | | </el-form-item> |
| | | <el-form-item |
| | | label="æ¯å¦å¿
å¡«" |
| | | prop="isRequired" |
| | | :rules="[{ required: true, message: 'è¯·éæ©æ¯å¦å¿
å¡«' }]" |
| | | > |
| | | <el-select v-model="formState.isRequired" placeholder="è¯·éæ©" style="width: 100%;"> |
| | | <el-option label="æ¯" value="1" /> |
| | | <el-option label="å¦" value="0" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-form> |
| | | <template #footer> |
| | | <div class="dialog-footer"> |
| | | <el-button type="primary" @click="handleSubmit">确认</el-button> |
| | | <el-button @click="closeModal">åæ¶</el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { ref, computed, getCurrentInstance } from "vue"; |
| | | import { add } from "@/api/productionManagement/productionRecords.js"; |
| | | |
| | | const props = defineProps({ |
| | | visible: { |
| | | type: Boolean, |
| | | required: true, |
| | | }, |
| | | }); |
| | | |
| | | const emit = defineEmits(["update:visible", "completed"]); |
| | | |
| | | const formRef = ref(null); |
| | | const formState = ref({ |
| | | parameterItem: "", |
| | | type: "", |
| | | unit: "", |
| | | parameterFormat: "", |
| | | isRequired: undefined, |
| | | }); |
| | | |
| | | const isShow = computed({ |
| | | get() { |
| | | return props.visible; |
| | | }, |
| | | set(val) { |
| | | emit("update:visible", val); |
| | | }, |
| | | }); |
| | | |
| | | const { proxy } = getCurrentInstance(); |
| | | const { parameter_tyep } = proxy.useDict("parameter_tyep"); |
| | | |
| | | const closeModal = () => { |
| | | isShow.value = false; |
| | | }; |
| | | |
| | | const handleSubmit = () => { |
| | | formRef.value.validate((valid) => { |
| | | if (valid) { |
| | | add(formState.value).then(() => { |
| | | isShow.value = false; |
| | | emit("completed"); |
| | | proxy.$modal.msgSuccess("æ°å¢æå"); |
| | | }); |
| | | } |
| | | }); |
| | | }; |
| | | |
| | | defineExpose({ |
| | | closeModal, |
| | | handleSubmit, |
| | | isShow, |
| | | }); |
| | | </script> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <!-- çäº§è®°å½ --> |
| | | <template> |
| | | <div class="app-container"> |
| | | <div class="search_form"> |
| | | <el-form :model="searchForm" :inline="true"> |
| | | <el-form-item label="åæ°ç¼ç :"> |
| | | <el-input |
| | | v-model="searchForm.code" |
| | | placeholder="请è¾å
¥" |
| | | clearable |
| | | style="width: 200px;" |
| | | @change="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="忰项:"> |
| | | <el-input |
| | | v-model="searchForm.parameterItem" |
| | | placeholder="请è¾å
¥" |
| | | clearable |
| | | style="width: 200px;" |
| | | @change="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="åæ°ç±»å:"> |
| | | <el-select |
| | | v-model="searchForm.type" |
| | | placeholder="è¯·éæ©" |
| | | clearable |
| | | style="width: 200px;" |
| | | @change="handleQuery" |
| | | > |
| | | <el-option |
| | | v-for="dict in parameter_tyep" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" @click="handleQuery">æç´¢</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <div class="table_list"> |
| | | <div style="text-align: right" class="mb10"> |
| | | <el-button type="primary" @click="showNewModal">æ°å¢</el-button> |
| | | </div> |
| | | <PIMTable |
| | | rowKey="id" |
| | | :column="tableColumn" |
| | | :tableData="tableData" |
| | | :page="page" |
| | | :tableLoading="tableLoading" |
| | | @pagination="pagination" |
| | | :total="page.total" |
| | | /> |
| | | </div> |
| | | <NewRecord v-if="isShowNewModal" v-model:visible="isShowNewModal" @completed="getList" /> |
| | | <EditRecord |
| | | v-if="isShowEditModal" |
| | | v-model:visible="isShowEditModal" |
| | | :record="record" |
| | | @completed="getList" |
| | | /> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { onMounted, ref, reactive, toRefs, getCurrentInstance } from "vue"; |
| | | import NewRecord from "./New.vue"; |
| | | import EditRecord from "./Edit.vue"; |
| | | import { listPage, del } from "@/api/productionManagement/productionRecords.js"; |
| | | |
| | | const data = reactive({ |
| | | searchForm: { |
| | | code: "", |
| | | parameterItem: "", |
| | | type: "", |
| | | }, |
| | | }); |
| | | const { searchForm } = toRefs(data); |
| | | const { proxy } = getCurrentInstance(); |
| | | const { parameter_tyep } = proxy.useDict("parameter_tyep"); |
| | | |
| | | const tableColumn = ref([ |
| | | { label: "åæ°ç¼ç ", prop: "code" }, |
| | | { label: "忰项", prop: "parameterItem" }, |
| | | { |
| | | label: "åæ°ç±»å", |
| | | prop: "type", |
| | | formatData: (params) => |
| | | (parameter_tyep?.value ?? parameter_tyep ?? []).find((d) => String(d.value) === String(params))?.label ?? params, |
| | | }, |
| | | { label: "åä½", prop: "unit" }, |
| | | { label: "åæ°æ ¼å¼", prop: "parameterFormat" }, |
| | | { |
| | | label: "æ¯å¦å¿
å¡«", |
| | | prop: "isRequired", |
| | | formatData: (params) => (params === '1' ? "æ¯" : "å¦"), |
| | | }, |
| | | // { label: "å建人", prop: "createUser" }, |
| | | { label: "åå»ºæ¥æ", prop: "createTime" }, |
| | | // { label: "æ´æ°äºº", prop: "updateUser" }, |
| | | { label: "æ´æ°æ¥æ", prop: "updateTime" }, |
| | | { |
| | | dataType: "action", |
| | | label: "æä½", |
| | | align: "center", |
| | | fixed: "right", |
| | | width: 160, |
| | | operation: [ |
| | | { |
| | | name: "ç¼è¾", |
| | | type: "text", |
| | | clickFun: (row) => showEditModal(row), |
| | | }, |
| | | { |
| | | name: "å é¤", |
| | | type: "text", |
| | | clickFun: (row) => handleDeleteRow(row), |
| | | }, |
| | | ], |
| | | }, |
| | | ]); |
| | | |
| | | const tableData = ref([]); |
| | | const tableLoading = ref(false); |
| | | const isShowNewModal = ref(false); |
| | | const isShowEditModal = ref(false); |
| | | const record = ref({}); |
| | | const page = reactive({ |
| | | current: 1, |
| | | size: 100, |
| | | total: 0, |
| | | }); |
| | | |
| | | const handleQuery = () => { |
| | | page.current = 1; |
| | | getList(); |
| | | }; |
| | | |
| | | const pagination = (obj) => { |
| | | page.current = obj.page; |
| | | page.size = obj.limit; |
| | | getList(); |
| | | }; |
| | | |
| | | const getList = () => { |
| | | tableLoading.value = true; |
| | | const params = { ...searchForm.value, ...page }; |
| | | listPage(params) |
| | | .then((res) => { |
| | | tableLoading.value = false; |
| | | const data = res.data; |
| | | tableData.value = data?.records ?? (Array.isArray(data) ? data : []); |
| | | page.total = data?.total ?? 0; |
| | | }) |
| | | .catch(() => { |
| | | tableLoading.value = false; |
| | | }); |
| | | }; |
| | | |
| | | const showNewModal = () => { |
| | | isShowNewModal.value = true; |
| | | }; |
| | | |
| | | const showEditModal = (row) => { |
| | | record.value = { ...row }; |
| | | isShowEditModal.value = true; |
| | | }; |
| | | |
| | | const handleDeleteRow = (row) => { |
| | | proxy.$modal |
| | | .confirm(`æ¯å¦ç¡®è®¤å é¤åæ°ç¼ç 为"${row.code}"çæ°æ®ï¼`) |
| | | .then(() => del([row.id])) |
| | | .then(() => { |
| | | getList(); |
| | | proxy.$modal.msgSuccess("å 餿å"); |
| | | }) |
| | | .catch(() => {}); |
| | | }; |
| | | |
| | | onMounted(() => { |
| | | getList(); |
| | | }); |
| | | </script> |
| | | |
| | | <style scoped></style> |
| | |
| | | // ç产工å |
| | | <template> |
| | | <div class="app-container"> |
| | | <div class="search_form"> |
| | |
| | | import { getCurrentInstance, reactive, toRefs } from "vue"; |
| | | import FilesDia from "./components/filesDia.vue"; |
| | | const { proxy } = getCurrentInstance(); |
| | | const { priority_type } = proxy.useDict("priority_type"); |
| | | |
| | | const tableColumn = ref([ |
| | | { |
| | | label: "å·¥åç±»å", |
| | | prop: "workOrderType", |
| | | width: "80", |
| | | label: "ä¼å
级", |
| | | prop: "priority", |
| | | width: '100px', |
| | | dataType: "tag", |
| | | formatData: val => proxy.selectDictLabel(priority_type.value, val), |
| | | formatType: val => { |
| | | const v = Number(val); |
| | | if (v === 0) return "danger"; // çº¢è² |
| | | if (v === 1) return "warning"; // é»è² |
| | | if (v === 2) return "success"; // ç»¿è² |
| | | return ""; |
| | | }, |
| | | }, |
| | | // { |
| | | // label: "å·¥åç±»å", |
| | | // prop: "workOrderType", |
| | | // width: "80", |
| | | // }, |
| | | { |
| | | label: "å·¥åç¼å·", |
| | | prop: "workOrderNo", |