Skip to content
On this page

selectModal / remoteSelect 使用文档

基本使用方法

js
{
        groupCode: 'baseForm',
        fieldLabel: srmI18n('i18n_purchaseBarcodeInfoItemList2b5d_businessField', '业务单据字段'),
        fieldName: 'businessField',
        fieldType: 'selectModal',
        dictCode: 'barcodeBusinessType',
        // disabled: true,
        extend: {
          // valueKey: 'id',
          modalColumns: [
            { field: 'filed', title: srmI18n('i18n_title_fieldValue', '字段值'), width: 150 },
            { field: 'filedName', title: srmI18n('i18n_field_columnName', '字段名'), width: 150 },
            { field: 'filedType', title: srmI18n('i18n_title_fieldType', '字段类型'), width: 150 },
          ],
          modalUrl: '/base/barcode/elsBarcodeAttribute/queryPageFieldList',
          selectModal: 'single',
          params: ({ pageData, userInfo }) => {
            return { businessType: pageData.businessType || '' , subAccount: userInfo.subAccount }
          },
          handleBefore: ({ pageData, userInfo }) => {
            if (!pageData.businessType) {
              return Promise.reject('请先选择业务单据类型')
            } else {
              return Promise.resolve()
            }
          },
          handleAfter: ({ pageData, userInfo }) => {
            pageData.businessField =''
            pageData.businessFieldName = ''
          },
        },
        callback: (ctx, { data, pageData, modalData }) => {
          if (!data?.length) return
          pageData.businessField = data[0].filed
          pageData.businessFieldName = data[0].filedName
        },
        placeholder: srmI18n('', '请输入业务单据字段'),
      },

Extend & Columns

ts
interface Columns {
  type?: string;
  field?: string;
  title?: string;
  align?: string;
  fieldLabelI18nKey?: string;
  width?: number;
}

type ModalParams =
  | Record<number | string, unknown>
  | ((value?: RecordString) => Record<number | string, unknown>);

type ModalType = "single" | "multiple" | "";

type RequestMethod = "get" | "post";

type HandleBefore = (value?: RecordString) => Promise<string | boolean | void>;

type HandleAfter = (value?: RecordString) => void;

interface Extend {
  valueKey?: string; // 指定select模块的value绑定对应数组的字段
  current?: number; // 针对同一个字段存在根据表单/表行等外界变量变化而切换extend渲染内容的需求
  modalConfigs?: unknown[]; // 针对同一个字段存在根据表单/表行等外界变量变化而切换extend渲染内容的需求
  modalColumns?: Columns[];
  modalUrl?: string;
  modalParams?: ModalParams;
  params?: ModalParams;
  selectModal?: ModalType;
  requestMethod?: RequestMethod;
  handleBefore?: HandleBefore;
  handleAfter?: HandleAfter;
}

关于 modalConfigs & current

在表行/头中,需要根据其余条件进行 modalConfigs 内参数的切换时可以使用以下操作

js
//其余条件
{
  groupCode: 'purchaseMassProdSampleItemList',
  title: '验证类别',
  fieldLabelI18nKey: 'i18n_purchaseMassProdSampleItemList0718_verifyType_dictText',
  fieldType: 'select',
  field: 'verifyType',
  align: '',
  headerAlign: 'center',
  dataFormat: '',
  defaultValue: '0',
  width: 150,
  dictCode: 'purchase_mass_prod_sample_verify_type',
  fold: '0',
  sum: '0',
  disabled: false,
  show: true,
  alertMsg: '',
  callback: /**
 * @param {Object} ctx 组件实例
 * @param {String} value 当前所选值
 * @param {Array} data selectModal, remoteSelect 已选行数据 (如有)
 * @param {Object} pageData 页面所有数据
 * @param {Object} layoutConfig 模板配置
 * @param {Object} row 表行数据 (如有)
 * @param {number} idx 表行索引值 (如有)
 * @param {(groupCode: string, fieldName: string, fn: (item: FormFieldsItem | ColumnItem) => void) => void}
 * customFormatItem 遍历模板分组配置,自定义格式化查询到的字段
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemRequired 自定义设置字段必填
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemDisabled 自定义设置字段置灰
 * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
 * setItemRequiredOrDisabled 自定义设置字段必填/置灰
 */
 function callback(
  ctx,
  {
   value,
   data,
   row,
   idx,
   pageData,
   layoutConfig,
   customFormatItem,
   setItemRequired,
   setItemDisabled,
   setItemRequiredOrDisabled,
  }
 ) {
  // 业务类型 verifyType;
  // 数据字典 purchase_mass_prod_sample_verify_type (0: 样品检测, 1: 批量试制);

  /**
   * @description: 业务规则:
   * 动态设置关联单据字段弹窗选择配置
   */
  if (value) {
   customFormatItem(
    "purchaseMassProdSampleItemList",
    "relationDocuments",
    function fn(item) {
     debugger;
     if (item.extend) {
      item.extend = Object.assign(item.extend, {
       current: value,
      });
     }
    }
   );
  }
 },
  required:'0',
  mobile: 1,
  helpText: ''
},
js
// 弹窗选择配置
  {
    fieldType: 'selectModal',
    fieldLabel: srmI18n('i18n_title_businessOrderNo', '业务单号'),
    fieldName: 'businessNumber',
    required: '1',
    extend: {
      current: 0,
      modalConfigs: [
        {
          title: srmI18n('i18n_title_bidDocument', '竞价单'),
          modalColumns: [
            { field: 'ebiddingNumber', title: srmI18n('i18n_title_bidDocumentNo', '竞价单号'), with: 150 },
            { field: 'ebiddingDesc', title: srmI18n('i18n_title_documentCheck', '单据检查'), with: 150 },
            { field: 'ebiddingStatus_dictText', title: srmI18n('i18n_field_ebiddingStatus', '竞价单状态'), with: 150 },
          ],
          modalUrl:
            '/ebidding/purchaseEbiddingHead/list?superQueryParams=%5B%7B%22fieldCode%22:%22ebiddingStatus%22,%22fieldType%22:%22select%22,%22dictCode%22:%22srmEbiddingStatus%22,%22fieldValue%22:%220%22,%22logicSymbol%22:%22ne%22,%22joiner%22:%22AND%22%7D%5D&column=id&order=desc',
          params: {},
        },
        {
          title: srmI18n('i18n_title_inquirySheet', '询价单'),
          modalColumns: [
            { field: 'enquiryNumber', title: srmI18n('i18n_title_inquirySheetNo', '询价单号'), with: 150 },
            { field: 'enquiryDesc', title: srmI18n('i18n_field_enquiryDesc', '询价描述'), with: 150 },
            { field: 'enquiryStatus_dictText', title: srmI18n('i18n_field_enquiryStatus', '询价单状态'), with: 150 },
          ],
          modalUrl:
            '/enquiry/purchaseEnquiryHead/list?superQueryParams=%5B%7B%22fieldCode%22:%22enquiryStatus%22,%22fieldType%22:%22input%22,%22dictCode%22:%22srmEnquiryStatus%22,%22fieldValue%22:%220%22,%22logicSymbol%22:%22ne%22,%22joiner%22:%22AND%22%7D%5D&column=id&order=desc',
          params: {},
        },
        {
          title: srmI18n('i18n_title_tenderFrom', '招标单'),
          modalColumns: [
            { field: 'biddingNumber', title: srmI18n('i18n_title_tenderNumber', '招标单号'), with: 150 },
            { field: 'biddingDesc', title: srmI18n('i18n_field_biddingDesc', '单据简称'), with: 150 },
          ],
          modalUrl:
            '/bidding/purchaseBiddingHead/list?superQueryParams=%5B%7B%22fieldCode%22:%22biddingStatus%22,%22fieldType%22:%22input%22,%22fieldValue%22:%220%22,%22logicSymbol%22:%22ne%22,%22joiner%22:%22AND%22%7D%5D&column=id&order=desc',
          params: {},
        },
      ],
    },
    /**
     * @param {Object} ctx 组件实例
     * @param {String} value 当前所选值
     * @param {Array} data selectModal, remoteSelect 已选行数据 (如有)
     * @param {Object} pageData 页面所有数据
     * @param {Object} layoutConfig 模板配置
     * @param {Object} row 表行数据 (如有)
     * @param {number} idx 表行索引值 (如有)
     * @param {(groupCode: string, fieldName: string, fn: (item: FormFieldsItem | ColumnItem) => void) => void}
     * customFormatItem 遍历模板分组配置,自定义格式化查询到的字段
     * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
     * setItemRequired 自定义设置字段必填
     * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
     * setItemDisabled 自定义设置字段置灰
     * @param {(groupCode: string, fieldName: string, flag: boolean) => void}
     * setItemRequiredOrDisabled 自定义设置字段必填/置灰
     */
    callback(ctx, { data, pageData }) {
      const businessType = pageData.businessType
      if (data) {
        // 竞价类型
        if (businessType === '1') {
          const { ebiddingNumber = '', ebiddingDesc = '', id = '' } = data[0] || {}
          pageData.businessNumber = ebiddingNumber
          pageData.businessName = ebiddingDesc
          pageData.businessId = id
        }
        // 询价类型
        if (businessType === '2') {
          const { enquiryNumber = '', enquiryDesc = '', id = '' } = data[0] || {}
          pageData.businessNumber = enquiryNumber
          pageData.businessName = enquiryDesc
          pageData.businessId = id
        }
        // 招投标类型
        if (businessType === '3') {
          const { biddingNumber = '', biddingDesc = '', id = '' } = data[0] || {}
          pageData.businessNumber = biddingNumber
          pageData.businessName = biddingDesc
          pageData.businessId = id
        }
      }
    },
  },

tips:可参考 质量协同/试制管理(量产批准)

多选模式下回显与显示选择行数据

extend: {
    ....
   /*
    添加checkItemParams和showCheckItem属性
    **checkItemParams通过已选中的数据回显弹窗列表选中内容
    **showCheckItem是否开启多选模式下回显与显示选择行数据
   */
    checkItemParams: function({row}){
      return {
        ids:row.rebateProduct||'0',
         frozenFunctionValue: '1',
      }
    },
   showCheckItem:true,
}

tips:可参考返利规则管理的门槛商品

customSelectModal 使用文档

作用

在表单/表行中需要弹窗选择功能,但系统弹窗无法满足需自定义弹窗样式时,使用该组件。

基本使用方法

js
//添加 customClick 事件
 <q-edit-page-layout ref="layoutRef" v-bind="options" @customClick="handleCustomClick" ></q-edit-page-layout>
//先在代码中实现你需要的弹窗
<q-field-select-modal ref="customSelectModal" @ok="customOk">
      <template #searchBar="{ onSearch, form }">
        <a-form style="display: flex; flex-flow: row wrap; margin: 4px" layout="inline">
          <a-form-item style="margin-right: 12px" :label="srmI18n('i18n_field_availableQty', '可用数量')">
            <q-select
              style="width: 200px"
              v-model:value="form.availableQuantityStatus"
              :placeholder="srmI18n('i18n_field_ViFqjWR_6f4361ef', '请选择可用数量')"
              allowClear
              dict-code="availableQuantityStatus"
            />
          </a-form-item>
          <a-form-item style="margin-right: 12px" :label="srmI18n('i18n_title_keyword', '关键字')">
            <a-input style="width: 200px" :placeholder="srmI18n('i18n_title_pleaseInputThekeyword', '请输入关键字')" v-model:value="form.keyWord" allowClear />
          </a-form-item>
          <a-form-item style="margin-right: 12px">
            <a-button type="primary" @click="() => onSearch()">{{ srmI18n('i18n_title_Query', '查询') }}</a-button>
          </a-form-item>
        </a-form>
      </template>
    </q-field-select-modal>

// 封装方法
import useCustomSelectModalHook from './hook/use-custom-select-modal-hook'
const { customSelectModal, handleCustomClick, customOk } = useCustomSelectModalHook(layoutRef)
// handleCustomClick 方法 参数如下
// const handleCustomClick: Ref<((field: GlobalPageLayoutTypes.FormFieldsItem) => void) | null> = ref(null)
// customOk 方法 参数如下
// const customOk: Ref<((data: GlobalPageLayoutTypes.RecordString[]) => void) | null> = ref(null)