Cloud Zhang
2024-05-16 01bcf534119297468283976ed22a43c587f6cb38
飞达操作
已添加8个文件
1256 ■■■■■ 文件已修改
src/api/tigerapi/mes/smt/feeder.ts 180 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/tigerapi/mes/smt/feedertype.ts 168 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tigerprojects/mes/smt/feeder/feeder/FeederDrawer.vue 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tigerprojects/mes/smt/feeder/feeder/index.vue 170 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tigerprojects/mes/smt/feeder/feeder/smt_feeder.data.ts 337 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tigerprojects/mes/smt/feeder/feeder_type/FeederTypeDrawer.vue 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tigerprojects/mes/smt/feeder/feeder_type/index.vue 158 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tigerprojects/mes/smt/feeder/feeder_type/smt_feeder_type.data.ts 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/tigerapi/mes/smt/feeder.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,180 @@
import { buildUUID } from '../../../../utils/uuid';
//import { ApiAction, ApiActionPage } from '../../model/baseModel';
import { genAction, Api } from '../../system';
import { useUserStore } from '/@/store/modules/user';
import { defHttp } from '/@/utils/http/axios';
import { isNullOrEmpty } from '/@/utils/is';
import { formatToDateTime } from '/@/utils/dateUtil';
/*
 * èŽ·å–é£žè¾¾ä¿¡æ¯
 */
export const getListByPage = async (params: any) => {
  let order = ''
  if (params.order != undefined) {
    order = params.order == 'descend' ? (params.field + ' desc') : params.field
  }
  let sqlcmd = '1=1';
  if (params?.FEEDER_CODE != undefined && params?.FEEDER_CODE != '') {
    sqlcmd += " And FEEDER_CODE like '%" + params?.FEEDER_CODE + "%'";
  }
  let option = {
    UserId: useUserStore().getUserInfo.userId as string,
    ByOrg: true,
    OrgCode: useUserStore().getUserInfo.orgCode as string
  }
  if (!isNullOrEmpty(params.page)) {
    const usParams = genAction('SMT_FEEDER', {
      QueryAble_T: '',
      where: sqlcmd,
      order: order,
      page: {
        pageAble_T: 'string',
        draw: 1,
        pageIndex: params.page,
        pageSize: params.pageSize,
      }
    });
    return getListByPageAsync(usParams);
  } else {
    const usParams = genAction('SMT_FEEDER', {
      QueryAble_T: '',
      where: sqlcmd
    });
    return getListByPageAsync(usParams);
  }
  // const rParams = genActionPage('BIZ_ERP_PROD_IN', sqlcmd, params.page, params.pageSize,option);
  // return getFinishedwarehouseListByPageAsync(rParams);
};
async function getListByPageAsync(params: any) {
  const data = await defHttp.post(
    { url: Api.QueryUrl, params },
    {
      isTransformResponse: false,
    },
  );
  let model = {}
  if (isNullOrEmpty(data.Data.page)) {
    model = {
      items: data.Data.Items,
    };
  } else {
    model = {
      items: data.Data.page.data,
      total: data.Data.page.totals,
    };
  }
  return model;
}
//新增飞达信息
export const Save = async (params: Recordable, isUpdate: boolean, isbaofei: boolean) => {
  const item: any = {
    ID: params.ID,
    CREATE_TIME: params?.CREATE_TIME,
    CREATE_USER: params?.CREATE_USER,
    UPDATE_TIME: params?.UPDATE_TIME,
    UPDATE_USER: params?.UPDATE_USER,
    GHOST_ROW: params?.GHOST_ROW,
    AUTH_ORG: params?.AUTH_ORG,
    AUTH_PROD: params?.AUTH_PROD,
    AUTH_WH: params?.AUTH_WH,
    FEEDER_CODE: params?.FEEDER_CODE,
    FEEDER_NAME: params?.FEEDER_NAME,
    FEEDER_TYPE: params?.FEEDER_TYPE,
    MAX_COUNT: params?.MAX_COUNT,
    ALERT_COUNT: params?.ALERT_COUNT,
    USED_COUNT: params?.USED_COUNT,
    IS_USE: params?.IS_USE,
    IS_PRINT: params?.IS_PRINT,
    WORK_ORDER: params?.WORK_ORDER,
    LINE_CODE: params?.LINE_CODE,
    SMT_CODE: params?.SMT_CODE,
    SLOT_NO: params?.SLOT_NO,
    PCB_SURFACE: params?.PCB_SURFACE,
    ITEM_CODE: params?.ITEM_CODE,
    REMARK: params?.REMARK,
  };
  let data;
  if (isUpdate) {
    if (isbaofei) {
      item.STATUS = 5;
    }
    const time = new Date();
    item.UPDATE_TIME = formatToDateTime(time);
    item.UPDATE_USER = useUserStore().getUserInfo.userId as string;
    // regionitem.ORG_CODE = useUserStore().getUserInfo.orgCode as string;
    // regionitem.AUTH_ORG = useUserStore().getUserInfo.orgCode as string;
    data = await defHttp.post(
      { url: Api.UpdateEntity, params: genAction('SMT_FEEDER', item) },
      {
        errorMessageMode: 'none',
        isTransformResponse: false,
      },
    );
  } else {
    // const usParams = genAction(
    //   'SMT_SOLDER',
    //   "REGION_CODE='" + params.REGION_CODE + "'AND AUTH_ORG='" + regionitem.ORG_CODE + "'",
    // );
    //var check = await isExist(usParams);
    //console.log('check',check)
    //if (!check.Data) {
    item.ID = buildUUID(); //生成GUID
    item.UPDATE_TIME = formatToDateTime(new Date());
    item.CREATE_USER = useUserStore().getUserInfo.userId as string;
    item.UPDATE_USER = useUserStore().getUserInfo.userId as string;
    // regionitem.ORG_CODE = useUserStore().getUserInfo.orgCode as string;
    // regionitem.AUTH_ORG = useUserStore().getUserInfo.orgCode as string;
    data = await defHttp.post(
      { url: Api.AddEntity, params: genAction('SMT_FEEDER', item) },
      {
        errorMessageMode: 'none',
        isTransformResponse: false,
      },
    );
    //} else {
    // return check.Message;
    //return '重复了';
    //}
  }
  return data;
};
//删除
export const Delete = async (Tool_Id: string) => {
  const usParams = genAction('SMT_FEEDER', `ID='${Tool_Id}'`)
  return await defHttp.post(
    { url: Api.DeleteWhere, params: usParams },
    {
      errorMessageMode: 'none',
      isTransformResponse: false
    }
  )
}
//下拉列表
// STATUSs å•据状态
export const optionsListApi = async (params: Recordable) => {
  const usParams = genAction('V_SMT_TOOL+ALARM_TYPEs', '');
  return await defHttp.post(
    { url: Api.urlQueryEnum, params: usParams },
    {
      errorMessageMode: 'none',
      isTransformResponse: false,
      // apiUrl: globSetting.taskApiUrl
    },
  );
};
//类型
export const optionsListApiType = async (params: Recordable) => {
  const usParams = genAction('V_SMT_TOOL+TYPEs', '');
  return await defHttp.post(
    { url: Api.urlQueryEnum, params: usParams },
    {
      errorMessageMode: 'none',
      isTransformResponse: false,
      // apiUrl: globSetting.taskApiUrl
    },
  );
};
src/api/tigerapi/mes/smt/feedertype.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,168 @@
import { buildUUID } from '../../../../utils/uuid';
//import { ApiAction, ApiActionPage } from '../../model/baseModel';
import { genAction, Api } from '../../system';
import { useUserStore } from '/@/store/modules/user';
import { defHttp } from '/@/utils/http/axios';
import { isNullOrEmpty } from '/@/utils/is';
import { formatToDateTime } from '/@/utils/dateUtil';
/*
 * èŽ·å–é£žè¾¾ç±»åž‹ä¿¡æ¯
 */
export const getListByPage = async (params: any) => {
  let order = ''
  if (params.order != undefined) {
    order = params.order == 'descend' ? (params.field + ' desc') : params.field
  }
  let sqlcmd = '1=1';
  if (params?.FEEDER_CODE != undefined && params?.FEEDER_CODE != '') {
    sqlcmd += " And FEEDER_CODE like '%" + params?.FEEDER_CODE + "%'";
  }
  let option = {
    UserId: useUserStore().getUserInfo.userId as string,
    ByOrg: true,
    OrgCode: useUserStore().getUserInfo.orgCode as string
  }
  if (!isNullOrEmpty(params.page)) {
    const usParams = genAction('SMT_FEEDER_HIS', {
      QueryAble_T: '',
      where: sqlcmd,
      order: order,
      page: {
        pageAble_T: 'string',
        draw: 1,
        pageIndex: params.page,
        pageSize: params.pageSize,
      }
    });
    return getListByPageAsync(usParams);
  } else {
    const usParams = genAction('SMT_FEEDER_HIS', {
      QueryAble_T: '',
      where: sqlcmd
    });
    return getListByPageAsync(usParams);
  }
  // const rParams = genActionPage('BIZ_ERP_PROD_IN', sqlcmd, params.page, params.pageSize,option);
  // return getFinishedwarehouseListByPageAsync(rParams);
};
async function getListByPageAsync(params: any) {
  const data = await defHttp.post(
    { url: Api.QueryUrl, params },
    {
      isTransformResponse: false,
    },
  );
  let model = {}
  if (isNullOrEmpty(data.Data.page)) {
    model = {
      items: data.Data.Items,
    };
  } else {
    model = {
      items: data.Data.page.data,
      total: data.Data.page.totals,
    };
  }
  return model;
}
//新增飞达类型信息
export const Save = async (params: Recordable, isUpdate: boolean, isbaofei: boolean) => {
  const item: any = {
    ID: params.ID,
    CREATE_TIME: params?.CREATE_TIME,
    CREATE_USER: params?.CREATE_USER,
    UPDATE_TIME: params?.UPDATE_TIME,
    UPDATE_USER: params?.UPDATE_USER,
    GHOST_ROW: params?.GHOST_ROW,
    AUTH_ORG: params?.AUTH_ORG,
    AUTH_PROD: params?.AUTH_PROD,
    AUTH_WH: params?.AUTH_WH,
    FEEDER_CODE: params?.FEEDER_CODE,
    FEEDER_NAME: params?.FEEDER_NAME,
    REMARK: params?.REMARK,
  };
  let data;
  if (isUpdate) {
    if (isbaofei) {
      item.STATUS = 5;
    }
    const time = new Date();
    item.UPDATE_TIME = formatToDateTime(time);
    item.UPDATE_USER = useUserStore().getUserInfo.userId as string;
    // regionitem.ORG_CODE = useUserStore().getUserInfo.orgCode as string;
    // regionitem.AUTH_ORG = useUserStore().getUserInfo.orgCode as string;
    data = await defHttp.post(
      { url: Api.UpdateEntity, params: genAction('SMT_FEEDER_HIS', item) },
      {
        errorMessageMode: 'none',
        isTransformResponse: false,
      },
    );
  } else {
    // const usParams = genAction(
    //   'SMT_SOLDER',
    //   "REGION_CODE='" + params.REGION_CODE + "'AND AUTH_ORG='" + regionitem.ORG_CODE + "'",
    // );
    //var check = await isExist(usParams);
    //console.log('check',check)
    //if (!check.Data) {
    item.ID = buildUUID(); //生成GUID
    item.UPDATE_TIME = formatToDateTime(new Date());
    item.CREATE_USER = useUserStore().getUserInfo.userId as string;
    item.UPDATE_USER = useUserStore().getUserInfo.userId as string;
    // regionitem.ORG_CODE = useUserStore().getUserInfo.orgCode as string;
    // regionitem.AUTH_ORG = useUserStore().getUserInfo.orgCode as string;
    data = await defHttp.post(
      { url: Api.AddEntity, params: genAction('SMT_FEEDER_HIS', item) },
      {
        errorMessageMode: 'none',
        isTransformResponse: false,
      },
    );
    //} else {
    // return check.Message;
    //return '重复了';
    //}
  }
  return data;
};
//删除
export const Delete = async (Tool_Id: string) => {
  const usParams = genAction('SMT_FEEDER_HIS', `ID='${Tool_Id}'`)
  return await defHttp.post(
    { url: Api.DeleteWhere, params: usParams },
    {
      errorMessageMode: 'none',
      isTransformResponse: false
    }
  )
}
//下拉列表
// STATUSs å•据状态
export const optionsListApi = async (params: Recordable) => {
  const usParams = genAction('V_SMT_TOOL+ALARM_TYPEs', '');
  return await defHttp.post(
    { url: Api.urlQueryEnum, params: usParams },
    {
      errorMessageMode: 'none',
      isTransformResponse: false,
      // apiUrl: globSetting.taskApiUrl
    },
  );
};
//类型
export const optionsListApiType = async (params: Recordable) => {
  const usParams = genAction('V_SMT_TOOL+TYPEs', '');
  return await defHttp.post(
    { url: Api.urlQueryEnum, params: usParams },
    {
      errorMessageMode: 'none',
      isTransformResponse: false,
      // apiUrl: globSetting.taskApiUrl
    },
  );
};
src/views/tigerprojects/mes/smt/feeder/feeder/FeederDrawer.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,74 @@
<template>
  <BasicDrawer
    v-bind="$attrs"
    @register="registerDrawer"
    showFooter
    :title="getTitle"
    width="800px"
    @ok="handleSubmit"
  >
    <BasicForm @register="registerForm" />
  </BasicDrawer>
</template>
<script lang="ts">
  import { defineComponent, ref, computed, unref } from 'vue';
  import { BasicForm, useForm } from '/@/components/Form/index';
  import { formSchema } from './smt_tool.data';
  import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
  import { Save } from '/@/api/tigerapi/mes/smt/feeder';
  export default defineComponent({
    name: 'ToolDrawer',
    components: { BasicDrawer, BasicForm },
    emits: ['success', 'register'],
    setup(_, { emit }) {
      const isUpdate = ref(true);
      const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner((data) => {
        resetFields();
        setDrawerProps({ confirmLoading: false });
        isUpdate.value = !!data?.isUpdate;
        if (unref(isUpdate)) {
          setFieldsValue({
            ...data.record,
          });
        }
      });
      const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
        labelWidth: 120,
        schemas: formSchema,
        actionColOptions: {
          span: 24,
        },
        showActionButtonGroup: false,
      });
      const getTitle = computed(() => (!unref(isUpdate) ? '新增飞达' : '编辑飞达'));
      async function handleSubmit() {
        try {
          const values = await validate();
          setDrawerProps({ confirmLoading: true });
          // TODO custom api
          //保存物料
          const apiAction = Save(values, unref(isUpdate),false);
          apiAction.then((action) => {
            if (action.IsSuccessed) {
              closeDrawer();
              emit('success');
            }
          });
        } finally {
          setDrawerProps({ confirmLoading: false });
        }
      }
      return {
        registerDrawer,
        registerForm,
        getTitle,
        handleSubmit,
      };
    },
  });
</script>
src/views/tigerprojects/mes/smt/feeder/feeder/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,170 @@
<template>
  <div>
    <BasicTable @register="registerTable">
      <template #toolbar>
        <a-button color="primary" @click="addTool"> æ·»åŠ  </a-button>
        <a-button ghost color="primary" @click="aoaToExcel"> å¯¼å‡º </a-button>
      </template>
      <template #action="{ record }">
        <TableAction :actions="[
      {
        icon: 'clarity:note-edit-line',
        tooltip: '修改',
        onClick: handleEdit.bind(null, record),
      },
      {
        icon: 'ant-design:delete-outlined',
        tooltip: '删除',
        popConfirm: {
          title: '是否确认删除?',
          placement: 'left',
          confirm: handleDelete.bind(null, record),
        },
      },
    ]" />
      </template>
    </BasicTable>
    <Loading :loading="compState.loading" :tip="compState.tip" />
    <!-- <WmsItemDrawer @register="registerDrawer" @success="handleSuccess" /> -->
    <FeederDrawer @register="registerDrawer" @success="handleSuccess" />
  </div>
</template>
<script lang="ts" setup>
import { reactive, unref } from 'vue';
import { aoaToSheetXlsx } from '/@/components/Excel';
import { BasicTable, useTable, TableAction } from '/@/components/Table';
import FeederDrawer from './FeederDrawer.vue';
import { useDrawer } from '/@/components/Drawer';
import { columns, searchFormSchema } from './smt_feeder.data';
import { getListByPage, Save, Delete } from '/@/api/tigerapi/mes/smt/feeder';
import { useGo } from '/@/hooks/web/usePage';
import { Loading } from '/@/components/Loading';
import { useMessage } from '/@/hooks/web/useMessage';
import { useI18n } from '/@/hooks/web/useI18n';
const { t } = useI18n();
const { createMessage } = useMessage();
const [registerDrawer, { openDrawer }] = useDrawer();
const go = useGo();
const compState = reactive({
  absolute: false,
  loading: false,
  tip: '加载中...',
});
const [registerTable, { getForm, getPaginationRef, reload }] = useTable({
  title: '飞达信息',
  api: getListByPage,
  columns,
  formConfig: {
    labelWidth: 120,
    schemas: searchFormSchema,
  },
  actionColumn: {
    width: 120,
    title: '操作',
    dataIndex: 'action',
    slots: { customRender: 'action' },
    fixed: 'right', //undefined,
  },
  ellipsis: true,
  useSearchForm: true,
  showTableSetting: false,
  bordered: true,
  showIndexColumn: false,
});
let arr: any[] = [];
//导出
function aoaToExcel() {
  const totals = getPaginationRef().total
  if (totals < 30000) {
    arr = [];
    compState.loading = true;
    const col = getForm().getFieldsValue()
    getListByPage(col).then((res) => {
      res.items.forEach(element => {
        arr.push({
          '飞达编码': element.FEEDER_CODE,
          '飞达名称': element.FEEDER_NAME,
          '飞达类型': element.FEEDER_TYPE,
          '最大使用次数': element.MAX_COUNT,
          '预警使用次数': element.ALERT_COUNT,
          '当前使用次数': element.USE_COUNT,
          '是否使用中': element.IS_USE,
          '是否打印': element.IS_PRINT,
          '工单号': element.WORK_ORDER,
          '产线编码': element.LINE_CODE,
          '贴片机编码': element.SMT_CODE,
          '站位号': element.SLOT_NO,
          '加工面': element.PCB_SURFACE,
          '物料编码': element.ITEM_CODE,
          '备注': element.REMARK,
          '创建人': element.CREATE_USER,
          '创建时间': element.CREATE_TIME,
        });
      });
      const arrHeader = columns.map((column) => column.title);
      const arrData = arr.map((item) => {
        return Object.keys(item).map((key) => item[key]);
      });
      // ä¿è¯data顺序与header一致
      if (arr.length < 30000) {
        aoaToSheetXlsx({
          data: arrData,
          header: arrHeader,
          filename: '飞达信息.xlsx',
        });
      } else {
        createMessage.error(t('导出数据不能超过三万条,如需要更多的请联系管理员'));
      }
      compState.loading = false;
    })
  } else {
    createMessage.error(t('导出数据不能超过三万条,如需要更多的请联系管理员'));
  }
}
//添加
function addTool() {
  openDrawer(true, {
    isUpdate: false,
  });
}
//编辑
function handleEdit(record: any) {
  openDrawer(true, {
    isUpdate: true,
    record
  });
}
function handleSuccess() {
  reload();
}
//报废
function handleBao(record: any) {
  const apiAction = Save(record, unref(true), true);
  apiAction.then((action) => {
    if (action.IsSuccessed) {
      createMessage.success(t('已报废'));
      reload();
    } else {
      createMessage.success(t('报废操作失败'));
    }
  });
}
//删除
function handleDelete(record: any) {
  const apiAction = Delete(record.ID);
  apiAction.then((action) => {
    if (action.IsSuccessed) {
      createMessage.success(t('已删除'));
      reload();
    } else {
      createMessage.success(t('删除操作失败'));
    }
  });
}
</script>
src/views/tigerprojects/mes/smt/feeder/feeder/smt_feeder.data.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,337 @@
import { BasicColumn } from '/@/components/Table';
import { FormSchema } from '/@/components/Table';
import { optionsListApi,optionsListApiType } from '/@/api/tigerapi/mes/smt/feeder';
import { h,unref } from 'vue';
import { Tag ,Tooltip} from 'ant-design-vue';
import{ useLocale } from '/@/locales/useLocale';
const { getLocale }=useLocale();
export const columns: BasicColumn[] = [
  {
    title: '飞达编码',
    dataIndex: 'FEEDER_CODE',
    width:200,
    sorter: true,
    resizable:true
  },
  {
    title: '飞达名称',
    dataIndex: 'FEEDER_NAME',
    width: 100,
    sorter: true,
    resizable:true
  },
  {
    title: '飞达类型',
    dataIndex: 'FEEDER_TYPE',
    width: 100,
    sorter: true,
    resizable: true,
    // customRender: ({ record }) => {
    //   const status = record.TYPE;
    //   var text = '';
    //   var color = '';
    //   switch (status) {
    //     case 0:
    //       text = '钢网';
    //       color = 'green';
    //       break;
    //     case 1:
    //       text = '刮刀';
    //       color = 'blue';
    //       break;
    //     default:
    //       break;
    //   }
    //   return h(Tooltip, { title: 'xxxxxx' }, () => h(Tag, { color: color }, () => text));
    // },
  },
  {
    title: '最大使用次数',
    dataIndex: 'MAX_COUNT',
    width: 100,
    sorter: true,
    resizable: true,
    // customRender: ({ record }) => {
    //   const status = record.ALARM_TYPE;
    //   var text = '';
    //   var color = '';
    //   switch (status) {
    //     case '0':
    //       text = '正常';
    //       color = 'green';
    //       break;
    //     case '1':
    //       text = '保养预警';
    //       color = 'blue';
    //       break;
    //     case '2':
    //       text = '报废预警';
    //       color = 'blue';
    //       break;
    //     default:
    //       break;
    //   }
    //   return h(Tooltip, { title: 'xxxxxx' }, () => h(Tag, { color: color }, () => text));
    // },
  },
  {
    title: '预警使用次数',
    dataIndex: 'ALERT_COUNT',
    width:100,
    sorter: true,
    resizable:true
  },
  {
    title: '当前使用次数',
    dataIndex: 'USE_COUNT',
    width:100,
    sorter: true,
    resizable:true
  }
  ,
  {
    title: '是否使用中',
    dataIndex: 'IS_USE',
    width:100,
    sorter: true,
    resizable:true
  }
  ,
  {
    title: '是否打印',
    dataIndex: 'IS_PRINT',
    width:100,
    sorter: true,
    resizable:true
  }
  ,
  {
    title: '工单号',
    dataIndex: 'WORK_ORDER',
    width:100,
    sorter: true,
    resizable:true
  }
  ,
  {
    title: '产线编码',
    dataIndex: 'LINE_CODE',
    width:100,
    sorter: true,
    resizable:true
  } ,
  {
    title: '贴片机编码',
    dataIndex: 'SMT_CODE',
    width:100,
    sorter: true,
    resizable:true
  } ,
  {
    title: '站位号',
    dataIndex: 'SLOT_NO',
    width:100,
    sorter: true,
    resizable:true
  }
  ,
  {
    title: '加工面',
    dataIndex: 'PCB_SURFACE',
    width:100,
    sorter: true,
    resizable:true
  }
  ,
  {
    title: '物料编码',
    dataIndex: 'ITEM_CODE',
    width:100,
    sorter: true,
    resizable:true
  }
  ,
  {
    title: '备注',
    dataIndex: 'REMARK',
    width:100,
    sorter: true,
    resizable:true
  }
  ,
  {
    title: '创建人',
    dataIndex: 'CREATE_USER',
    width:100,
    sorter: true,
    resizable:true
  },
  {
    title: '创建时间',
    dataIndex: 'CREATE_TIME',
    width:100,
    sorter: true,
    resizable:true
  }
];
export const searchFormSchema: FormSchema[] = [
  {
    field: 'FEEDER_CODE',
    label: '飞达编码',
    component: 'Input',
    colProps: { span: 8 },
  }
];
//新增组件export const
export const formSchema: FormSchema[] = [
  {
    field: 'ID',
    label: 'ID',
    component: 'Input',
    show: false,
  },
  {
    label: '飞达编码',
    field: 'FEEDER_CODE',
    required: true,
    colProps: { span: 8 },
    component: 'Input',
  },
  {
    label: '飞达名称',
    field: 'FEEDER_NAME',
    required: true,
    colProps: { span: 8 },
    component: 'Input',
  },
  {
    label: '飞达类型',
    field: 'FEEDER_TYPE',
    required: true,
    colProps: { span: 8 },
    component: 'Input',
  },
  {
    label: '最大使用次数',
    field: 'MAX_COUNT',
    required: true,
    colProps: { span: 8 },
    component: 'Input',
  },
  {
    label: '预警使用次数',
    field: 'ALERT_COUNT',
    required: true,
    colProps: { span: 8 },
    component: 'Input',
  },
  {
    label: '当前使用次数',
    field: 'USE_COUNT',
    required: true,
    colProps: { span: 8 },
    component: 'Input',
  }
  ,
  {
    label: '是否使用中',
    field: 'IS_USE',
    required: true,
    colProps: { span: 8 },
    component: 'Select',
    componentProps: {
      options: [
        {
          label: 'Y',
          value: 'Y',
          key: 'Y',
        },
        {
          label: 'N',
          value: 'N',
          key: 'N',
        },
      ],
    },
  }
  ,
  {
    label: '是否打印',
    field: 'IS_PRINT',
    required: true,
    colProps: { span: 8 },
    component: 'Select',
    componentProps: {
      options: [
        {
          label: 'Y',
          value: 'Y',
          key: 'Y',
        },
        {
          label: 'N',
          value: 'N',
          key: 'N',
        },
      ],
    },
  }
  ,
  {
    label: '工单号',
    field: 'WORK_ORDER',
    required: true,
    colProps: { span: 8 },
    component: 'Input',
  }
  ,
  {
    label: '产线编码',
    field: 'LINE_CODE',
    required: true,
    colProps: { span: 8 },
    component: 'Input',
  } ,
  {
    label: '贴片机编码',
    field: 'SMT_CODE',
    required: true,
    colProps: { span: 8 },
    component: 'Input',
  } ,
  {
    label: '站位号',
    field: 'SLOT_NO',
    required: true,
    colProps: { span: 8 },
    component: 'Input',
  }
  ,
  {
    label: '加工面',
    field: 'PCB_SURFACE',
    required: true,
    colProps: { span: 8 },
    component: 'Input',
  }
  ,
  {
    label: '物料编码',
    field: 'ITEM_CODE',
    required: true,
    colProps: { span: 8 },
    component: 'Input',
  }
  ,
  {
    label: '备注',
    field: 'REMARK',
    required: true,
    colProps: { span: 8 },
    component: 'Input',
  }
];
src/views/tigerprojects/mes/smt/feeder/feeder_type/FeederTypeDrawer.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,74 @@
<template>
  <BasicDrawer
    v-bind="$attrs"
    @register="registerDrawer"
    showFooter
    :title="getTitle"
    width="800px"
    @ok="handleSubmit"
  >
    <BasicForm @register="registerForm" />
  </BasicDrawer>
</template>
<script lang="ts">
  import { defineComponent, ref, computed, unref } from 'vue';
  import { BasicForm, useForm } from '/@/components/Form/index';
  import { formSchema } from './smt_tool.data';
  import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
  import { Save } from '/@/api/tigerapi/mes/smt/feedertype';
  export default defineComponent({
    name: 'ToolDrawer',
    components: { BasicDrawer, BasicForm },
    emits: ['success', 'register'],
    setup(_, { emit }) {
      const isUpdate = ref(true);
      const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner((data) => {
        resetFields();
        setDrawerProps({ confirmLoading: false });
        isUpdate.value = !!data?.isUpdate;
        if (unref(isUpdate)) {
          setFieldsValue({
            ...data.record,
          });
        }
      });
      const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
        labelWidth: 120,
        schemas: formSchema,
        actionColOptions: {
          span: 24,
        },
        showActionButtonGroup: false,
      });
      const getTitle = computed(() => (!unref(isUpdate) ? '新增飞达类型' : '编辑飞达类型'));
      async function handleSubmit() {
        try {
          const values = await validate();
          setDrawerProps({ confirmLoading: true });
          // TODO custom api
          //保存物料
          const apiAction = Save(values, unref(isUpdate),false);
          apiAction.then((action) => {
            if (action.IsSuccessed) {
              closeDrawer();
              emit('success');
            }
          });
        } finally {
          setDrawerProps({ confirmLoading: false });
        }
      }
      return {
        registerDrawer,
        registerForm,
        getTitle,
        handleSubmit,
      };
    },
  });
</script>
src/views/tigerprojects/mes/smt/feeder/feeder_type/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,158 @@
<template>
  <div>
    <BasicTable @register="registerTable">
      <template #toolbar>
        <a-button color="primary" @click="addTool"> æ·»åŠ  </a-button>
        <a-button ghost color="primary" @click="aoaToExcel"> å¯¼å‡º </a-button>
      </template>
      <template #action="{ record }">
        <TableAction :actions="[
      {
        icon: 'clarity:note-edit-line',
        tooltip: '修改',
        onClick: handleEdit.bind(null, record),
      },
      {
        icon: 'ant-design:delete-outlined',
        tooltip: '删除',
        popConfirm: {
          title: '是否确认删除?',
          placement: 'left',
          confirm: handleDelete.bind(null, record),
        },
      },
    ]" />
      </template>
    </BasicTable>
    <Loading :loading="compState.loading" :tip="compState.tip" />
    <!-- <WmsItemDrawer @register="registerDrawer" @success="handleSuccess" /> -->
    <FeederTypeDrawer @register="registerDrawer" @success="handleSuccess" />
  </div>
</template>
<script lang="ts" setup>
import { reactive, unref } from 'vue';
import { aoaToSheetXlsx } from '/@/components/Excel';
import { BasicTable, useTable, TableAction } from '/@/components/Table';
import FeederTypeDrawer from './FeederTypeDrawer.vue';
import { useDrawer } from '/@/components/Drawer';
import { columns, searchFormSchema } from './smt_feeder_type.data';
import { getListByPage, Save, Delete } from '/@/api/tigerapi/mes/smt/feedertype';
import { useGo } from '/@/hooks/web/usePage';
import { Loading } from '/@/components/Loading';
import { useMessage } from '/@/hooks/web/useMessage';
import { useI18n } from '/@/hooks/web/useI18n';
const { t } = useI18n();
const { createMessage } = useMessage();
const [registerDrawer, { openDrawer }] = useDrawer();
const go = useGo();
const compState = reactive({
  absolute: false,
  loading: false,
  tip: '加载中...',
});
const [registerTable, { getForm, getPaginationRef, reload }] = useTable({
  title: '工具信息',
  api: getListByPage,
  columns,
  formConfig: {
    labelWidth: 120,
    schemas: searchFormSchema,
  },
  actionColumn: {
    width: 120,
    title: '操作',
    dataIndex: 'action',
    slots: { customRender: 'action' },
    fixed: 'right', //undefined,
  },
  ellipsis: true,
  useSearchForm: true,
  showTableSetting: false,
  bordered: true,
  showIndexColumn: false,
});
let arr: any[] = [];
//导出
function aoaToExcel() {
  const totals = getPaginationRef().total
  if (totals < 30000) {
    arr = [];
    compState.loading = true;
    const col = getForm().getFieldsValue()
    getListByPage(col).then((res) => {
      res.items.forEach(element => {
        arr.push({
          '飞达编码': element.FEEDER_CODE,
          '飞达名称': element.FEEDER_NAME,
          '备注': element.REMARK,
          '创建人': element.CREATE_USER,
          '创建时间': element.CREATE_TIME,
        });
      });
      const arrHeader = columns.map((column) => column.title);
      const arrData = arr.map((item) => {
        return Object.keys(item).map((key) => item[key]);
      });
      // ä¿è¯data顺序与header一致
      if (arr.length < 30000) {
        aoaToSheetXlsx({
          data: arrData,
          header: arrHeader,
          filename: '飞达类型信息.xlsx',
        });
      } else {
        createMessage.error(t('导出数据不能超过三万条,如需要更多的请联系管理员'));
      }
      compState.loading = false;
    })
  } else {
    createMessage.error(t('导出数据不能超过三万条,如需要更多的请联系管理员'));
  }
}
//添加
function addTool() {
  openDrawer(true, {
    isUpdate: false,
  });
}
//编辑
function handleEdit(record: any) {
  openDrawer(true, {
    isUpdate: true,
    record
  });
}
function handleSuccess() {
  reload();
}
//报废
function handleBao(record: any) {
  const apiAction = SaveTool(record, unref(true), true);
  apiAction.then((action) => {
    if (action.IsSuccessed) {
      createMessage.success(t('已报废'));
      reload();
    } else {
      createMessage.success(t('报废操作失败'));
    }
  });
}
//删除
function handleDelete(record: any) {
  const apiAction = DeleteTool(record.ID);
  apiAction.then((action) => {
    if (action.IsSuccessed) {
      createMessage.success(t('已删除'));
      reload();
    } else {
      createMessage.success(t('删除操作失败'));
    }
  });
}
</script>
src/views/tigerprojects/mes/smt/feeder/feeder_type/smt_feeder_type.data.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,95 @@
import { BasicColumn } from '/@/components/Table';
import { FormSchema } from '/@/components/Table';
import { optionsListApi,optionsListApiType } from '/@/api/tigerapi/mes/smt/feeder';
import { h,unref } from 'vue';
import { Tag ,Tooltip} from 'ant-design-vue';
import{ useLocale } from '/@/locales/useLocale';
const { getLocale }=useLocale();
export const columns: BasicColumn[] = [
  {
    title: '飞达编码',
    dataIndex: 'FEEDER_CODE',
    width:200,
    sorter: true,
    resizable:true
  },
  {
    title: '飞达名称',
    dataIndex: 'FEEDER_NAME',
    width: 100,
    sorter: true,
    resizable:true
  }
  ,
  {
    title: '备注',
    dataIndex: 'REMARK',
    width:100,
    sorter: true,
    resizable:true
  }
  ,
  {
    title: '创建人',
    dataIndex: 'CREATE_USER',
    width:100,
    sorter: true,
    resizable:true
  },
  {
    title: '创建时间',
    dataIndex: 'CREATE_TIME',
    width:100,
    sorter: true,
    resizable:true
  }
];
export const searchFormSchema: FormSchema[] = [
  {
    field: 'FEEDER_CODE',
    label: '飞达编码',
    component: 'Input',
    colProps: { span: 8 },
  }
];
//新增组件export const
export const formSchema: FormSchema[] = [
  {
    field: 'ID',
    label: 'ID',
    component: 'Input',
    show: false,
  },
  {
    label: '飞达编码',
    field: 'FEEDER_CODE',
    required: true,
    colProps: { span: 8 },
    component: 'Input',
  },
  {
    label: '飞达名称',
    field: 'FEEDER_NAME',
    required: true,
    colProps: { span: 8 },
    component: 'Input',
  },
  {
    label: '飞达类型',
    field: 'FEEDER_TYPE',
    required: true,
    colProps: { span: 8 },
    component: 'Input',
  },
  {
    label: '备注',
    field: 'REMARK',
    required: true,
    colProps: { span: 8 },
    component: 'Input',
  }
];