2 天以前 1c1af9b0fc10778ae5ac13cc68fd4030affbcfe1
src/views/wls/stocktaking/task/modules/form.vue
@@ -14,7 +14,6 @@
import { useVbenForm } from '#/adapter/form';
import {
  createStockTaking,
  finishStockTaking,
  getStockTaking,
  submitStockTaking,
  updateStockTaking,
@@ -35,29 +34,23 @@
const isEditable = computed(() =>
  ['create', 'update'].includes(formType.value),
);
const isExecute = computed(() => formType.value === 'execute'); // 是否执行盘点模式
const isSubmit = computed(() => formType.value === 'submit'); // 是否提交模式
const canSubmit = computed(
  () =>
    formType.value === 'update' &&
    formData.value?.status === MesWmStockTakingTaskStatusEnum.PREPARE,
const isSubmit = computed(() => formType.value === 'submit'); // 是否开始盘点模式
const isResultEditable = computed(
  // 盘点中(审批中)可维护盘点结果
  () => formData.value?.status === MesWmStockTakingTaskStatusEnum.APPROVING,
);
const showLineTab = computed(() => !formData.value?.blindFlag); // 盲盘不展示盘点清单
const showResultTab = computed(
  () =>
    isExecute.value ||
    (!!formData.value?.status &&
      formData.value.status !== MesWmStockTakingTaskStatusEnum.PREPARE),
    !!formData.value?.status &&
    formData.value.status !== MesWmStockTakingTaskStatusEnum.PREPARE,
);
const getTitle = computed(() => {
  if (formType.value === 'detail') {
    return $t('ui.actionTitle.view', ['盘点任务']);
  }
  if (formType.value === 'execute') {
    return '执行盘点';
  }
  if (formType.value === 'submit') {
    return '提交盘点任务';
    return '开始盘点';
  }
  return formType.value === 'update'
    ? $t('ui.actionTitle.edit', ['盘点任务'])
@@ -78,7 +71,7 @@
  wrapperClass: 'grid-cols-3',
});
/** 提交盘点任务:表单有修改时先保存,再调用提交接口 */
/** 开始盘点:表单有修改时先保存,再提交 */
async function handleSubmit() {
  const { valid } = await formApi.validate();
  if (!valid || !formData.value?.id) {
@@ -94,23 +87,7 @@
      originalSnapshot.value = current;
    }
    await submitStockTaking(formData.value.id);
    message.success('提交成功');
    await modalApi.close();
    emit('success');
  } finally {
    modalApi.unlock();
  }
}
/** 执行盘点 */
async function handleExecute() {
  if (!formData.value?.id) {
    return;
  }
  modalApi.lock();
  try {
    await finishStockTaking(formData.value.id);
    message.success('执行盘点成功');
    message.success('开始盘点成功');
    await modalApi.close();
    emit('success');
  } finally {
@@ -163,7 +140,7 @@
    // 加载数据
    const data = modalApi.getData<{ formType: FormType; id?: number }>();
    formType.value = data.formType;
    subTabsName.value = data.formType === 'execute' ? 'results' : 'lines';
    subTabsName.value = 'lines';
    formApi.setState({ schema: useFormSchema(formType.value, formApi) });
    formApi.setDisabled(!isEditable.value);
    modalApi.setState({ showConfirmButton: isEditable.value });
@@ -199,7 +176,7 @@
      </Tabs.TabPane>
      <Tabs.TabPane v-if="showResultTab" key="results" tab="盘点结果">
        <ResultList
          :form-type="isExecute ? 'execute' : 'detail'"
          :form-type="isResultEditable ? 'execute' : 'detail'"
          :task-id="formData.id"
        />
      </Tabs.TabPane>
@@ -207,18 +184,11 @@
    <template #prepend-footer>
      <div class="flex flex-auto items-center gap-2">
        <Popconfirm
          v-if="canSubmit || isSubmit"
          title="确认提交该盘点任务?【提交后将不能修改】"
          v-if="isSubmit"
          title="确认开始盘点?开始后将冻结库存并可录入/导入实盘数。"
          @confirm="handleSubmit"
        >
          <Button type="primary">提交</Button>
        </Popconfirm>
        <Popconfirm
          v-if="isExecute"
          title="确认执行盘点操作?"
          @confirm="handleExecute"
        >
          <Button type="primary">执行盘点</Button>
          <Button type="primary">开始盘点</Button>
        </Popconfirm>
      </div>
    </template>