| | |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item |
| | | label="工序类型" |
| | | prop="type" |
| | | label="报工人" |
| | | prop="ids" |
| | | :rules="[ |
| | | { |
| | | { |
| | | required: true, |
| | | message: '请选择工序类型', |
| | | message: '请选择报工人', |
| | | trigger: 'change', |
| | | } |
| | | ]" |
| | | > |
| | | <el-select v-model="formState.type" placeholder="请选择工序类型"> |
| | | <el-option label="计时" :value="0" /> |
| | | <el-option label="计件" :value="1" /> |
| | | <el-select |
| | | v-model="formState.ids" |
| | | multiple |
| | | filterable |
| | | clearable |
| | | collapse-tags |
| | | collapse-tags-tooltip |
| | | placeholder="请选择报工人" |
| | | @change="handleReportUsersChange" |
| | | > |
| | | <el-option |
| | | v-for="item in userOptions" |
| | | :key="item.userId" |
| | | :label="item.nickName" |
| | | :value="item.userId" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <!-- <el-form-item--> |
| | | <!-- label="工序类型"--> |
| | | <!-- prop="type"--> |
| | | <!-- :rules="[--> |
| | | <!-- {--> |
| | | <!-- required: true,--> |
| | | <!-- message: '请选择工序类型',--> |
| | | <!-- }--> |
| | | <!-- ]"--> |
| | | <!-- >--> |
| | | <!-- <el-select v-model="formState.type" placeholder="请选择工序类型">--> |
| | | <!-- <el-option label="计时" :value="0" />--> |
| | | <!-- <el-option label="计件" :value="1" />--> |
| | | <!-- </el-select>--> |
| | | <!-- </el-form-item>--> |
| | | <!-- <el-form-item label="工资定额" prop="salaryQuota">--> |
| | | <!-- <el-input v-model="formState.salaryQuota" type="number" :step="0.001" />--> |
| | | <!-- </el-form-item>--> |
| | |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { ref, computed, getCurrentInstance, watch, reactive, nextTick, onBeforeUnmount } from "vue"; |
| | | import { ref, computed, getCurrentInstance, watch, reactive, nextTick, onBeforeUnmount, onMounted } from "vue"; |
| | | import { update } from "@/api/productionManagement/productionProcess.js"; |
| | | import { getLedgerPage } from "@/api/equipmentManagement/ledger.js"; |
| | | import { userListNoPageByTenantId } from "@/api/system/user.js"; |
| | | |
| | | const props = defineProps({ |
| | | visible: { |
| | |
| | | no: props.record.no, |
| | | deviceId: props.record.deviceId, |
| | | deviceName: props.record.deviceName, |
| | | ids: [], |
| | | reportWorkerList: [], |
| | | remark: props.record.remark, |
| | | salaryQuota: props.record.salaryQuota, |
| | | isQuality: props.record.isQuality, |
| | |
| | | const deviceQuery = ref(""); |
| | | const deviceScrollWrap = ref(null); |
| | | const __deviceLoadMoreSentinel = "__deviceLoadMoreSentinel"; |
| | | const userOptions = ref([]); |
| | | |
| | | const deviceHasMore = computed(() => { |
| | | const total = Number(page.total ?? 0); |
| | |
| | | |
| | | const handleDeviceChange = (val) => { |
| | | formState.value.deviceName = equipmentList.value.find(item => item.id === val)?.deviceName || ""; |
| | | }; |
| | | |
| | | const normalizeReportUserIds = (record) => { |
| | | const raw = record?.ids; |
| | | if (Array.isArray(raw)) { |
| | | return raw.map(item => item?.userId ?? item).filter(Boolean); |
| | | } |
| | | if (typeof raw === "string") { |
| | | return raw.split(/[,,;;\s]+/g).map(item => item.trim()).filter(Boolean); |
| | | } |
| | | if (Array.isArray(record?.reportWorkerList)) { |
| | | return record.reportWorkerList.map(item => item?.userId).filter(Boolean); |
| | | } |
| | | return []; |
| | | }; |
| | | |
| | | const handleReportUsersChange = (val) => { |
| | | const userMap = new Map(userOptions.value.map(item => [item.userId, item.nickName])); |
| | | formState.value.reportWorkerList = (val || []).map(userId => ({ |
| | | userId, |
| | | userName: userMap.get(userId) || "", |
| | | })); |
| | | }; |
| | | |
| | | const getUserOptions = async () => { |
| | | const res = await userListNoPageByTenantId(); |
| | | userOptions.value = Array.isArray(res?.data) ? res.data : []; |
| | | if (formState.value.ids?.length) { |
| | | handleReportUsersChange(formState.value.ids); |
| | | } |
| | | }; |
| | | |
| | | const isShow = computed({ |
| | |
| | | }; |
| | | |
| | | const applyRecordToForm = (record) => { |
| | | const ids = normalizeReportUserIds(record); |
| | | formState.value = { |
| | | id: record.id, |
| | | name: record.name || "", |
| | |
| | | type: record.type, |
| | | deviceId: record.deviceId, |
| | | deviceName: record.deviceName || "", |
| | | ids, |
| | | reportWorkerList: Array.isArray(record.reportWorkerList) ? record.reportWorkerList : [], |
| | | remark: record.remark || "", |
| | | salaryQuota: record.salaryQuota || "", |
| | | isQuality: record.isQuality, |
| | | }; |
| | | if (!formState.value.reportWorkerList.length && ids.length) { |
| | | handleReportUsersChange(ids); |
| | | } |
| | | ensureSelectedDeviceOption(); |
| | | }; |
| | | |
| | |
| | | |
| | | let { proxy } = getCurrentInstance() |
| | | |
| | | onMounted(() => { |
| | | getUserOptions(); |
| | | }); |
| | | |
| | | const closeModal = () => { |
| | | isShow.value = false; |
| | | }; |
| | |
| | | const handleSubmit = () => { |
| | | proxy.$refs["formRef"].validate(valid => { |
| | | if (valid) { |
| | | handleReportUsersChange(formState.value.ids); |
| | | update(formState.value).then(() => { |
| | | // 关闭模态框 |
| | | isShow.value = false; |