|  | @@ -0,0 +1,340 @@
 | 
	
		
			
				|  |  | +<template>
 | 
	
		
			
				|  |  | +    <a-modal
 | 
	
		
			
				|  |  | +      title="选择产品(select product)"
 | 
	
		
			
				|  |  | +      width="95%"
 | 
	
		
			
				|  |  | +      :visible="visible"
 | 
	
		
			
				|  |  | +      :maskClosable="false"
 | 
	
		
			
				|  |  | +      switchFullscreen
 | 
	
		
			
				|  |  | +      @ok = "handleOk"
 | 
	
		
			
				|  |  | +      @cancel="handleCancel">
 | 
	
		
			
				|  |  | +        <div>
 | 
	
		
			
				|  |  | +          <a-card  :body-style="{ padding: '10px' }" :bordered="false" style="margin: 10px;">
 | 
	
		
			
				|  |  | +            <div class="table-page-search-wrapper">
 | 
	
		
			
				|  |  | +                <a-form :model="queryParams" :label-col="labelCol" :wrapper-col="wrapperCol" @keyup.enter.native="searchQuery">
 | 
	
		
			
				|  |  | +                <a-row :gutter="24">
 | 
	
		
			
				|  |  | +                    <a-col :md="6" :sm="8">
 | 
	
		
			
				|  |  | +                        <a-form-item label="分类(class)">
 | 
	
		
			
				|  |  | +                            <!-- <a-input placeholder="请输入" v-model:value="queryParams.classId"></a-input> -->
 | 
	
		
			
				|  |  | +                            <JSelectInput   v-model:value="queryParams.classId"  placeholder="请选择" :options="classOption" ></JSelectInput>
 | 
	
		
			
				|  |  | +                        </a-form-item>
 | 
	
		
			
				|  |  | +                    </a-col>
 | 
	
		
			
				|  |  | +                    <a-col :md="6" :sm="8">
 | 
	
		
			
				|  |  | +                        <a-form-item label="编码(code)">
 | 
	
		
			
				|  |  | +                            <a-input placeholder="请输入" v-model:value="queryParams.code"></a-input>
 | 
	
		
			
				|  |  | +                        </a-form-item>
 | 
	
		
			
				|  |  | +                    </a-col>
 | 
	
		
			
				|  |  | +                    <a-col :md="6" :sm="8">
 | 
	
		
			
				|  |  | +                        <a-form-item label="中文名(Chinese name)">
 | 
	
		
			
				|  |  | +                            <a-input placeholder="请输入" v-model:value="queryParams.chineseName"></a-input>
 | 
	
		
			
				|  |  | +                        </a-form-item>
 | 
	
		
			
				|  |  | +                    </a-col>
 | 
	
		
			
				|  |  | +                    <template v-if="toggleSearchStatus">
 | 
	
		
			
				|  |  | +                        <a-col :md="6" :sm="8">
 | 
	
		
			
				|  |  | +                            <a-form-item label="英文名(English name)">
 | 
	
		
			
				|  |  | +                                <a-input placeholder="请输入" v-model:value="queryParams.englishName"></a-input>
 | 
	
		
			
				|  |  | +                            </a-form-item>
 | 
	
		
			
				|  |  | +                        </a-col>
 | 
	
		
			
				|  |  | +                        <!-- <a-col :md="6" :sm="8">
 | 
	
		
			
				|  |  | +                            <a-form-item label="规格(specifications)">
 | 
	
		
			
				|  |  | +                                <a-input placeholder="请输入" v-model:value="queryParams.specifications"></a-input>
 | 
	
		
			
				|  |  | +                            </a-form-item>
 | 
	
		
			
				|  |  | +                        </a-col> -->
 | 
	
		
			
				|  |  | +                        <a-col :md="6" :sm="8">
 | 
	
		
			
				|  |  | +                            <a-form-item label="型号(model)">
 | 
	
		
			
				|  |  | +                                <a-input placeholder="请输入" v-model:value="queryParams.model"></a-input>
 | 
	
		
			
				|  |  | +                            </a-form-item>
 | 
	
		
			
				|  |  | +                        </a-col>
 | 
	
		
			
				|  |  | +                        <a-col :md="6" :sm="8">
 | 
	
		
			
				|  |  | +                            <a-form-item label="虚拟产品(virtual product)" :label-col="labelCol1" :wrapper-col="wrapperCol1">
 | 
	
		
			
				|  |  | +                                <JDictSelectTag v-model:value="queryParams.virtualProduct" placeholder="请选择" dictCode="yes_or_no"/>
 | 
	
		
			
				|  |  | +                            </a-form-item>
 | 
	
		
			
				|  |  | +                        </a-col>
 | 
	
		
			
				|  |  | +                        <a-col :md="6" :sm="8">
 | 
	
		
			
				|  |  | +                            <a-form-item label="有害物质(harmful substances)" :label-col="labelCol1" :wrapper-col="wrapperCol1">
 | 
	
		
			
				|  |  | +                                <JDictSelectTag v-model:value="queryParams.harmfulSubstances" placeholder="请选择" dictCode="yes_or_no"/>
 | 
	
		
			
				|  |  | +                            </a-form-item>
 | 
	
		
			
				|  |  | +                        </a-col>
 | 
	
		
			
				|  |  | +                    </template>
 | 
	
		
			
				|  |  | +                    <a-col :md="6" :sm="8">
 | 
	
		
			
				|  |  | +                        <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
 | 
	
		
			
				|  |  | +                            <a-button type="primary" @click="searchQuery" >查询(search)</a-button>
 | 
	
		
			
				|  |  | +                            <a-button type="primary" @click="searchReset"  style="margin-left: 8px">重置(reset)</a-button>
 | 
	
		
			
				|  |  | +                            <a @click="handleToggleSearch" style="margin-left: 8px">
 | 
	
		
			
				|  |  | +                            {{ toggleSearchStatus ? '收起' : '展开' }}
 | 
	
		
			
				|  |  | +                            <a-icon :type="toggleSearchStatus ? 'up' : 'down'" />
 | 
	
		
			
				|  |  | +                            </a>
 | 
	
		
			
				|  |  | +                        </span>
 | 
	
		
			
				|  |  | +                    </a-col>
 | 
	
		
			
				|  |  | +                </a-row>
 | 
	
		
			
				|  |  | +            </a-form>
 | 
	
		
			
				|  |  | +           </div>
 | 
	
		
			
				|  |  | +        </a-card>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        <a-card  :body-style="{ padding: '10px' }" :bordered="false" style="margin: 10px;">
 | 
	
		
			
				|  |  | +            <a-alert type="info" show-icon class="alert" style="margin-bottom: 8px">
 | 
	
		
			
				|  |  | +            <template #message>
 | 
	
		
			
				|  |  | +                <template v-if="selectedRowKeys.length > 0">
 | 
	
		
			
				|  |  | +                <span>已选中 {{ selectedRowKeys.length }} 条记录</span>
 | 
	
		
			
				|  |  | +                <a-divider type="vertical" />
 | 
	
		
			
				|  |  | +                <a @click="selectedRowKeys = []">清空</a>
 | 
	
		
			
				|  |  | +                </template>
 | 
	
		
			
				|  |  | +                <template v-else>
 | 
	
		
			
				|  |  | +                <span>未选中任何数据</span>
 | 
	
		
			
				|  |  | +                </template>
 | 
	
		
			
				|  |  | +            </template>
 | 
	
		
			
				|  |  | +            </a-alert>
 | 
	
		
			
				|  |  | +            <a-table
 | 
	
		
			
				|  |  | +                :columns="columns"
 | 
	
		
			
				|  |  | +                :row-key="record => record.id"
 | 
	
		
			
				|  |  | +                :data-source="dataSource"
 | 
	
		
			
				|  |  | +                bordered
 | 
	
		
			
				|  |  | +                size="small"
 | 
	
		
			
				|  |  | +                @change="handleTableChange"
 | 
	
		
			
				|  |  | +                :pagination="pagination"
 | 
	
		
			
				|  |  | +                :scroll="{ x: 2500, y: 300 }"
 | 
	
		
			
				|  |  | +                :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
 | 
	
		
			
				|  |  | +            >
 | 
	
		
			
				|  |  | +            </a-table>
 | 
	
		
			
				|  |  | +        </a-card>
 | 
	
		
			
				|  |  | +      </div>
 | 
	
		
			
				|  |  | +    </a-modal>
 | 
	
		
			
				|  |  | +</template>
 | 
	
		
			
				|  |  | +<script lang="ts" setup>
 | 
	
		
			
				|  |  | +    import {ref, reactive } from 'vue';
 | 
	
		
			
				|  |  | +    import { defHttp } from '/@/utils/http/axios';
 | 
	
		
			
				|  |  | +    import { message } from 'ant-design-vue';
 | 
	
		
			
				|  |  | +    import { filterObj, getFileAccessHttpUrl } from '/@/utils/common/compUtils';
 | 
	
		
			
				|  |  | +    import { JDictSelectTag} from '/@/components/Form';
 | 
	
		
			
				|  |  | +    import JSelectInput from '/@/components/Form/src/jeecg/components/JSelectInput.vue';
 | 
	
		
			
				|  |  | +    const emit = defineEmits([ 'selectProduct']); //定义emit
 | 
	
		
			
				|  |  | +    let classOption = ref([])
 | 
	
		
			
				|  |  | +    var visible = ref(false)
 | 
	
		
			
				|  |  | +    const columns = [
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            title: '分类(class)',
 | 
	
		
			
				|  |  | +            dataIndex: 'classId_dictText',
 | 
	
		
			
				|  |  | +            key: 'classId_dictText',
 | 
	
		
			
				|  |  | +            align:"center"
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            title: '编码(code)',
 | 
	
		
			
				|  |  | +            dataIndex: 'code',
 | 
	
		
			
				|  |  | +            key: 'code',
 | 
	
		
			
				|  |  | +            align:"center"
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            title: '中文名(Chinese name)',
 | 
	
		
			
				|  |  | +            dataIndex: 'chineseName',
 | 
	
		
			
				|  |  | +            key: 'chineseName',
 | 
	
		
			
				|  |  | +            align:"center",
 | 
	
		
			
				|  |  | +            width:200
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            title: '英文名(English name)',
 | 
	
		
			
				|  |  | +            key: 'englishName',
 | 
	
		
			
				|  |  | +            dataIndex: 'englishName',
 | 
	
		
			
				|  |  | +            align:"center"
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        // {
 | 
	
		
			
				|  |  | +        //     title: '规格(specifications)',
 | 
	
		
			
				|  |  | +        //     key: 'specifications',
 | 
	
		
			
				|  |  | +        //     dataIndex: 'specifications',
 | 
	
		
			
				|  |  | +        //     align:"center"
 | 
	
		
			
				|  |  | +        // },
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            title: '型号(model)',
 | 
	
		
			
				|  |  | +            key: 'model',
 | 
	
		
			
				|  |  | +            dataIndex: 'model',
 | 
	
		
			
				|  |  | +            align:"center"
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            title: '计量单位(measurement unit)',
 | 
	
		
			
				|  |  | +            key: 'measurementUnit',
 | 
	
		
			
				|  |  | +            dataIndex: 'measurementUnit',
 | 
	
		
			
				|  |  | +            align:"center",
 | 
	
		
			
				|  |  | +            width:250
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            title: '虚拟产品(virtual product)',
 | 
	
		
			
				|  |  | +            key: 'virtualProduct',
 | 
	
		
			
				|  |  | +            dataIndex: 'virtualProduct',
 | 
	
		
			
				|  |  | +            align:"center",
 | 
	
		
			
				|  |  | +            customRender:function (t, r, index) {
 | 
	
		
			
				|  |  | +              if(t.text==1){
 | 
	
		
			
				|  |  | +                return '是(yes)'
 | 
	
		
			
				|  |  | +              }else if(t.text==0){
 | 
	
		
			
				|  |  | +                return '否(no)'
 | 
	
		
			
				|  |  | +              }else{
 | 
	
		
			
				|  |  | +                return ''
 | 
	
		
			
				|  |  | +              } 
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            title: '有害物质(harmful substances)',
 | 
	
		
			
				|  |  | +            key: 'harmfulSubstances',
 | 
	
		
			
				|  |  | +            dataIndex: 'harmfulSubstances',
 | 
	
		
			
				|  |  | +            align:"center",
 | 
	
		
			
				|  |  | +            width:250,
 | 
	
		
			
				|  |  | +            customRender:function (t, r, index) {
 | 
	
		
			
				|  |  | +              if(t.text==1){
 | 
	
		
			
				|  |  | +                return '是(yes)'
 | 
	
		
			
				|  |  | +              }else if(t.text==0){
 | 
	
		
			
				|  |  | +                return '否(no)'
 | 
	
		
			
				|  |  | +              }else{
 | 
	
		
			
				|  |  | +                return ''
 | 
	
		
			
				|  |  | +              } 
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +    ];
 | 
	
		
			
				|  |  | +    const labelCol = ref({
 | 
	
		
			
				|  |  | +    xs: { span: 24 },
 | 
	
		
			
				|  |  | +    sm: { span: 9 },
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +    const wrapperCol = ref({
 | 
	
		
			
				|  |  | +        xs: { span: 24 },
 | 
	
		
			
				|  |  | +        sm: { span: 15 },
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +    const labelCol1 = ref({
 | 
	
		
			
				|  |  | +    xs: { span: 24 },
 | 
	
		
			
				|  |  | +    sm: { span: 12 },
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +    const wrapperCol1 = ref({
 | 
	
		
			
				|  |  | +        xs: { span: 24 },
 | 
	
		
			
				|  |  | +        sm: { span: 12 },
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +    const dataSource =ref([]);
 | 
	
		
			
				|  |  | +    let selectedRowKeys = ref([]);
 | 
	
		
			
				|  |  | +    let selectedRows = ref([]);
 | 
	
		
			
				|  |  | +    const toggleSearchStatus = ref(false);
 | 
	
		
			
				|  |  | +    const queryParams = ref({
 | 
	
		
			
				|  |  | +        classId:'',
 | 
	
		
			
				|  |  | +        code:'',
 | 
	
		
			
				|  |  | +        chineseName:'',
 | 
	
		
			
				|  |  | +        englishName:'',
 | 
	
		
			
				|  |  | +        specifications:'',
 | 
	
		
			
				|  |  | +        model:'',
 | 
	
		
			
				|  |  | +        chineseAlias:'',
 | 
	
		
			
				|  |  | +        englishAlias:'',
 | 
	
		
			
				|  |  | +        status:'',
 | 
	
		
			
				|  |  | +        virtualProduct:'',
 | 
	
		
			
				|  |  | +        harmfulSubstances:'',
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +    let pagination = ref({
 | 
	
		
			
				|  |  | +      current: 1,
 | 
	
		
			
				|  |  | +      pageSize: 10,
 | 
	
		
			
				|  |  | +      total: '', // 假设总共有100条数据
 | 
	
		
			
				|  |  | +      showSizeChanger: true,
 | 
	
		
			
				|  |  | +      showQuickJumper: true,
 | 
	
		
			
				|  |  | +      showTotal: (total, range) => {
 | 
	
		
			
				|  |  | +          return range[0] + "-" + range[1] + " 共" + total + "条"
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +      size:'small'
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +    function loadData(){
 | 
	
		
			
				|  |  | +        let params = getQueryParams();
 | 
	
		
			
				|  |  | +        defHttp
 | 
	
		
			
				|  |  | +        .get({ url: '/baseCode/baseProductArchive/list',params}, { isTransformResponse: false })
 | 
	
		
			
				|  |  | +        .then((res) => {
 | 
	
		
			
				|  |  | +            if (res.success) {
 | 
	
		
			
				|  |  | +                dataSource.value = res.result.records;
 | 
	
		
			
				|  |  | +                pagination.value.total = res.result.total;
 | 
	
		
			
				|  |  | +                pagination.value.current = res.result.current;
 | 
	
		
			
				|  |  | +                pagination.value.pageSize = res.result.size;                
 | 
	
		
			
				|  |  | +            } else {
 | 
	
		
			
				|  |  | +                message.error(res.message);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        })
 | 
	
		
			
				|  |  | +        .finally(() => {
 | 
	
		
			
				|  |  | +            // loading.value = false;
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    function getQueryParams(){
 | 
	
		
			
				|  |  | +        let params = Object.assign(queryParams.value);
 | 
	
		
			
				|  |  | +        params.pageNo = pagination.value.current;
 | 
	
		
			
				|  |  | +        params.pageSize = pagination.value.pageSize;
 | 
	
		
			
				|  |  | +        return filterObj(params);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    function handleTableChange(paginations, filters, sorter){
 | 
	
		
			
				|  |  | +        pagination.value.total = paginations.total;
 | 
	
		
			
				|  |  | +        pagination.value.current = paginations.current;
 | 
	
		
			
				|  |  | +        pagination.value.pageSize = paginations.pageSize;
 | 
	
		
			
				|  |  | +        loadData()
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +    function getOptiom(){
 | 
	
		
			
				|  |  | +    defHttp
 | 
	
		
			
				|  |  | +        .get({ url: 'baseCode/baseProductClass/list'}, { isTransformResponse: false })
 | 
	
		
			
				|  |  | +        .then((res) => {
 | 
	
		
			
				|  |  | +            if (res.success) {
 | 
	
		
			
				|  |  | +              classOption.value = []
 | 
	
		
			
				|  |  | +              res.result.records.forEach(element => {
 | 
	
		
			
				|  |  | +                  var obj = {
 | 
	
		
			
				|  |  | +                    label: element.name?element.name:'无名称请维护',
 | 
	
		
			
				|  |  | +                    value: element.id?element.id:''
 | 
	
		
			
				|  |  | +                  };
 | 
	
		
			
				|  |  | +                  classOption.value.push( obj)
 | 
	
		
			
				|  |  | +              });    
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        })
 | 
	
		
			
				|  |  | +        .finally(() => {
 | 
	
		
			
				|  |  | +            // loading.value = false;
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +    function searchQuery(){
 | 
	
		
			
				|  |  | +        loadData();
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    function searchReset(){
 | 
	
		
			
				|  |  | +        queryParams.value = {
 | 
	
		
			
				|  |  | +            classId:'',
 | 
	
		
			
				|  |  | +            code:'',
 | 
	
		
			
				|  |  | +            chineseName:'',
 | 
	
		
			
				|  |  | +            englishName:'',
 | 
	
		
			
				|  |  | +            specifications:'',
 | 
	
		
			
				|  |  | +            model:'',
 | 
	
		
			
				|  |  | +            chineseAlias:'',
 | 
	
		
			
				|  |  | +            englishAlias:'',
 | 
	
		
			
				|  |  | +            status:'',
 | 
	
		
			
				|  |  | +            virtualProduct:'',
 | 
	
		
			
				|  |  | +            harmfulSubstances:'',
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        pagination.value.current =1;
 | 
	
		
			
				|  |  | +        pagination.value.pageSize = 10; 
 | 
	
		
			
				|  |  | +        loadData();
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    function handleToggleSearch(){
 | 
	
		
			
				|  |  | +        toggleSearchStatus.value = !toggleSearchStatus.value;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    function onSelectChange(keys,rows){
 | 
	
		
			
				|  |  | +        selectedRowKeys.value = keys
 | 
	
		
			
				|  |  | +        selectedRows.value = rows
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    function handleOk(){
 | 
	
		
			
				|  |  | +      if(selectedRowKeys.value.length==0){
 | 
	
		
			
				|  |  | +        message.error('请勾选数据');
 | 
	
		
			
				|  |  | +      }else{
 | 
	
		
			
				|  |  | +        emit('selectProduct', selectedRows.value)
 | 
	
		
			
				|  |  | +        handleCancel()
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    function handleCancel(){
 | 
	
		
			
				|  |  | +      visible.value = false
 | 
	
		
			
				|  |  | +      selectedRowKeys.value = []
 | 
	
		
			
				|  |  | +      selectedRows.value=[]
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    function getTable(){
 | 
	
		
			
				|  |  | +        visible.value = true
 | 
	
		
			
				|  |  | +        loadData()
 | 
	
		
			
				|  |  | +        getOptiom()
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    defineExpose({
 | 
	
		
			
				|  |  | +      getTable
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +</script>
 | 
	
		
			
				|  |  | +<style scoped lang="less">
 | 
	
		
			
				|  |  | +/deep/.ant-form-item{
 | 
	
		
			
				|  |  | +    margin-bottom: 8px !important;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +// /deep/.ant-table-wrapper .ant-table-thead > tr > th, .ant-table-wrapper .ant-table-thead > tr > td{
 | 
	
		
			
				|  |  | +//     padding: 8px !important;
 | 
	
		
			
				|  |  | +// }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +</style>
 |