| | |
| | | sm: { span: 18 }, |
| | | }, |
| | | //表单默认冒号 |
| | | colon: true, |
| | | colon: false, |
| | | |
| | | }, |
| | | }; |
| | | |
| | |
| | | ]; |
| | | //查询数据 |
| | | export const searchFormSchema: FormSchema[] = [ |
| | | { |
| | | label: "客户名称", |
| | | field: "customerName", |
| | | component: 'JInput', |
| | | //colProps: {span: 6}, |
| | | }, |
| | | { |
| | | label: "客户名称", |
| | | field: "customerName", |
| | | component: 'Input', |
| | | componentProps: { |
| | | style: { width: '160px' } // 增加宽度,确保标签显示完整 |
| | | }, |
| | | }, |
| | | { |
| | | label: "代理商名称", |
| | | field: "agentsName", |
| | | component: 'JInput', |
| | | //colProps: {span: 6}, |
| | | component: 'Input', |
| | | componentProps: { |
| | | style: { width: '160px' } // 增加宽度,确保标签显示完整 |
| | | }, |
| | | }, |
| | | { |
| | | label: "审核状态", |
| | | field: "reviewStatus", |
| | | component: 'JDictSelectTag', |
| | | componentProps:{ |
| | | options: [ |
| | | { label: '待审核', value: '1' }, |
| | | { label: '已驳回', value: '2' }, |
| | | { label: '已通过', value: '3' }, |
| | | ] |
| | | }, |
| | | //colProps: {span: 6}, |
| | | }, |
| | | { |
| | | label: "审核状态", |
| | | field: "reviewStatus", |
| | | component: 'JDictSelectTag', |
| | | componentProps:{ |
| | | dictCode: "yuyici_status", |
| | | style: { width: '140px'} // 增加宽度,确保标签显示完整 |
| | | }, |
| | | }, |
| | | ]; |
| | | //表单数据 |
| | | export const formSchema: FormSchema[] = [ |
| | |
| | | api: list, |
| | | columns, |
| | | canResize: true, |
| | | formConfig: { |
| | | //labelWidth: 120, |
| | | schemas: searchFormSchema, |
| | | autoSubmitOnEnter: true, |
| | | showAdvancedButton: true, |
| | | fieldMapToNumber: [], |
| | | fieldMapToTime: [], |
| | | }, |
| | | formConfig: { |
| | | labelWidth: 90, // 设置标签宽度,确保标签显示完整 |
| | | schemas: searchFormSchema, |
| | | autoSubmitOnEnter: true, |
| | | showAdvancedButton: true, |
| | | fieldMapToNumber: [], |
| | | fieldMapToTime: [], |
| | | compact: true, // 启用紧凑模式 |
| | | baseColProps: { |
| | | xs: 24, |
| | | sm: 4, |
| | | md: 4, |
| | | lg: 4, |
| | | xl: 4, |
| | | xxl: 4, |
| | | }, |
| | | rowProps: { |
| | | gutter: 8, |
| | | }, |
| | | actionColOptions: { |
| | | span: 8, |
| | | style: { textAlign: 'left' }, |
| | | }, |
| | | }, |
| | | actionColumn: { |
| | | width: 180, |
| | | fixed: 'right', |
| | |
| | | <style lang="less" scoped> |
| | | :deep(.ant-picker), |
| | | :deep(.ant-input-number) { |
| | | width: 100%; |
| | | width: 100%;} |
| | | :deep(.ant-form) { |
| | | text-align: left !important; |
| | | } |
| | | |
| | | // 确保搜索项左对齐 |
| | | :deep(.ant-row) { |
| | | justify-content: flex-start !important; |
| | | } |
| | | |
| | | |
| | | .contract-select-modal { |
| | | .contract-file-card { |
| | | cursor: pointer; |
| | |
| | | ]; |
| | | //查询数据 |
| | | export const searchFormSchema: FormSchema[] = [ |
| | | { |
| | | { |
| | | label: "客户名称", |
| | | field: "customerName", |
| | | component: 'Input', |
| | | componentProps: { |
| | | style: { width: '150px' } |
| | | }, |
| | | colProps: { |
| | | span: 6, |
| | | style: { marginRight: '-125px' } |
| | | }, |
| | | }, |
| | | { |
| | | }, |
| | | { |
| | | label: "合作月", |
| | | field: "month", |
| | | component: 'Input', |
| | | componentProps: { |
| | | type: 'number', |
| | | placeholder: '请输入合作月(正整数)', |
| | | style: { width: '150px' } |
| | | }, |
| | | colProps: { |
| | | span: 6, |
| | | style: { marginRight: '-125px' } |
| | | }, |
| | | }, |
| | | { |
| | | }, |
| | | { |
| | | label: "加急类型", |
| | | field: "emergencyStatus", |
| | | component: 'Select', |
| | |
| | | { label: '正常', value: 3 }, |
| | | { label: '紧急', value: 1 }, |
| | | ], |
| | | style: { width: '150px'} |
| | | }, |
| | | colProps: { |
| | | span: 6, |
| | | style: { marginRight: '-125px' } |
| | | }, |
| | | }, |
| | | { |
| | | }, |
| | | { |
| | | label: "审核状态", |
| | | field: "reviewStatus", |
| | | component: 'JDictSelectTag', |
| | | componentProps:{ |
| | | dictCode:"yuyici_status", |
| | | style: { width: '150px'} |
| | | }, |
| | | colProps: { |
| | | span: 6, |
| | | style: { marginRight: '-125px' } |
| | | }, |
| | | }, |
| | | }, |
| | | ]; |
| | | //表单数据 |
| | | export const formSchema: FormSchema[] = [ |
| | |
| | | autoAdvancedCol: 4, |
| | | fieldMapToNumber: [], |
| | | fieldMapToTime: [], |
| | | compact: true, |
| | | baseColProps: { |
| | | xs: 24, |
| | | sm: 4, |
| | | md: 4, |
| | | lg: 4, |
| | | xl: 4, |
| | | xxl: 4, |
| | | }, |
| | | rowProps: { |
| | | gutter: 8, |
| | | }, |
| | | actionColOptions: { |
| | | span: 8, |
| | | style: { textAlign: 'left' }, |
| | | }, |
| | | }, |
| | | actionColumn: { |
| | | width: 180, |
| | |
| | | label: "代理商名称", |
| | | field: "agentsName", |
| | | component: 'JInput', |
| | | componentProps: { |
| | | style: { width: '180px' } // 增加宽度,确保文字显示完整 |
| | | }, |
| | | //colProps: {span: 6}, |
| | | }, |
| | | { |
| | |
| | | { label: '已驳回', value: '2' }, |
| | | { label: '已通过', value: '3' }, |
| | | ], |
| | | style: { width: '150px'} |
| | | style: { width: '180px'} |
| | | }, |
| | | //colProps: {span: 6}, |
| | | }, |
| | |
| | | canResize: true, |
| | | immediate: false, // 禁用立即加载,等待角色查询完成后再加载 |
| | | formConfig: { |
| | | //labelWidth: 120, |
| | | schemas: searchFormSchema, |
| | | autoSubmitOnEnter: true, |
| | | showAdvancedButton: true, |
| | | fieldMapToNumber: [], |
| | | fieldMapToTime: [], |
| | | }, |
| | | //labelWidth: 120, |
| | | schemas: searchFormSchema, |
| | | autoSubmitOnEnter: true, |
| | | showAdvancedButton: true, |
| | | fieldMapToNumber: [], |
| | | fieldMapToTime: [], |
| | | // 布局配置 |
| | | compact: true, // 启用紧凑模式 |
| | | baseColProps: { |
| | | xs: 24, |
| | | sm: 4, |
| | | md: 4, |
| | | lg: 4, |
| | | xl: 4, |
| | | xxl: 4, |
| | | }, |
| | | rowProps: { |
| | | gutter: 8, |
| | | }, |
| | | actionColOptions: { |
| | | span: 8, |
| | | style: { textAlign: 'left' }, |
| | | }, |
| | | }, |
| | | actionColumn: { |
| | | width: 180, |
| | | fixed: 'right', |
| | |
| | | dictCode:"wa_status" |
| | | }, |
| | | //colProps: {span: 6}, |
| | | }, |
| | | }, |
| | | ]; |
| | | //表单数据 |
| | | export const formSchema: FormSchema[] = [ |
| | |
| | | showAdvancedButton: true, |
| | | fieldMapToNumber: [], |
| | | fieldMapToTime: [], |
| | | actionColOptions: { |
| | | span: 6, |
| | | style: { textAlign: 'left' }, |
| | | }, |
| | | }, |
| | | actionColumn: { |
| | | width: 120, |
| | |
| | | <template> |
| | | <div class="chart-container"> |
| | | <h2 class="section-title" style="font-size: 20px; font-weight: bold; margin-left: 60px; color: black;">签约语义词数量概览 |
| | | </h2> |
| | | <div ref="chartRef" class="echart"></div> |
| | | </div> |
| | | </template> |
| | |
| | | <div class="overview-item"> |
| | | <div class="item-icon" style="background: #e8f3ff; color: #165dff;">合</div> |
| | | <div class="item-content"> |
| | | <div class="item-num">1459 份</div> |
| | | <div class="item-num">{{ isLoadingStats ? '加载中...' : contractCount }} 份</div> |
| | | <div class="item-text">合同总数</div> |
| | | </div> |
| | | </div> |
| | |
| | | <div class="overview-item"> |
| | | <div class="item-icon" style="background: #f3efff; color: #722ed1;">企</div> |
| | | <div class="item-content"> |
| | | <div class="item-num">14596 家</div> |
| | | <div class="item-num">{{ isLoadingStats ? '加载中...' : customerCount }} 家</div> |
| | | <div class="item-text">合作企业总数</div> |
| | | </div> |
| | | </div> |
| | |
| | | <div class="overview-item"> |
| | | <div class="item-icon" style="background: #fff5e8; color: #ff7d00;">语</div> |
| | | <div class="item-content"> |
| | | <div class="item-num">14596 条</div> |
| | | <div class="item-num">{{ isLoadingStats ? '加载中...' : semanticWordCount }} 条</div> |
| | | <div class="item-text">语义总量</div> |
| | | </div> |
| | | </div> |
| | |
| | | <div class="overview-item"> |
| | | <div class="item-icon" style="background: #e8fff2; color: #00b42a;">文</div> |
| | | <div class="item-content"> |
| | | <div class="item-num">14596 篇</div> |
| | | <div class="item-num">{{ isLoadingStats ? '加载中...' : copywritingCount }} 篇</div> |
| | | <div class="item-text">发送门户文章总量</div> |
| | | </div> |
| | | </div> |
| | |
| | | <div class="overview-item"> |
| | | <div class="item-icon" style="background: #e8f3ff; color: #165dff;">词</div> |
| | | <div class="item-content"> |
| | | <div class="item-num">20 分</div> |
| | | <div class="item-num">{{ avgRankTime }}</div> |
| | | <div class="item-text">平均上词时间</div> |
| | | </div> |
| | | </div> |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="attention-z"> |
| | | </div> |
| | | <div class="attention-z"> |
| | | <h2 class="section-title" style="font-size: 20px; font-weight: bold; margin-left: 60px; color: black;">签约语义词数量概览</h2> |
| | | <div ref="semanticChartContainer" style="margin: 0 20px 20px 20px; padding: 16px; border: 1px solid #e9ecef; border-radius: 20px; background: white;"> |
| | | <SemanticWordCountChart /> |
| | | </div> |
| | | </div> |
| | |
| | | const tabs = ref(['deepseek', '豆包', '文小言', '元宝', '通义', 'kimi']); |
| | | // const tab2 = ref(['deepseek', '豆包', '文小言']); |
| | | const currentTab = ref('deepseek'); |
| | | |
| | | // 统计数据 |
| | | const contractCount = ref(0); |
| | | const customerCount = ref(0); |
| | | const semanticWordCount = ref(0); |
| | | const copywritingCount = ref(0); |
| | | const avgRankTime = ref('5 分'); |
| | | const isLoadingStats = ref(false); |
| | | // 合同到期数据 |
| | | const contractExpiringData = ref< |
| | | Array<{ |
| | |
| | | }); |
| | | } |
| | | |
| | | // 获取统计数据 |
| | | const fetchStatistics = async () => { |
| | | isLoadingStats.value = true; |
| | | try { |
| | | const userInfo = userStore.getUserInfo; |
| | | const userId = userInfo?.id; |
| | | if (!userId) { |
| | | console.warn('未获取到用户ID,无法获取统计数据'); |
| | | return; |
| | | } |
| | | |
| | | // 准备参数 |
| | | const params = { |
| | | user: userId, |
| | | role: userInfo?.roleId || '' |
| | | }; |
| | | |
| | | // 并行调用所有统计接口 |
| | | const [contractRes, customerRes, semanticWordRes, copywritingRes] = await Promise.all([ |
| | | defHttp.get({ url: '/contract/contract/count', params }), |
| | | defHttp.get({ url: '/customer/customer/count', params }), |
| | | defHttp.get({ url: '/semanticword/semanticWord/count', params }), |
| | | defHttp.get({ url: '/copywriting/copywriting/count', params }) |
| | | ]); |
| | | |
| | | // 更新统计数据 |
| | | contractCount.value = contractRes || 0; |
| | | customerCount.value = customerRes || 0; |
| | | semanticWordCount.value = semanticWordRes || 0; |
| | | copywritingCount.value = copywritingRes || 0; |
| | | avgRankTime.value = '5 分'; // 固定为5分钟 |
| | | } catch (error) { |
| | | console.error('获取统计数据失败:', error); |
| | | } finally { |
| | | isLoadingStats.value = false; |
| | | } |
| | | }; |
| | | |
| | | // 页面加载时初始化数据 |
| | | onMounted(async () => { |
| | | // 先检查用户角色 |
| | | await checkIsCustomer(); |
| | | |
| | | // 获取统计数据 |
| | | await fetchStatistics(); |
| | | |
| | | // 如果是客户,不显示卡片区域,关闭加载状态(虽然不会显示,但保持状态一致) |
| | | if (isCustomer.value) { |
| | | // 客户用户只加载表格数据,不加载卡片数据 |
| | |
| | | const customerData = result; |
| | | // 填充表单数据 |
| | | Object.assign(formData, customerData); |
| | | |
| | | // 确保 customer 对象存在 |
| | | if (!formData.customer && customerData.customerName) { |
| | | // 如果没有 customer 对象但有 customerName,尝试从其他接口获取客户信息 |
| | | try { |
| | | const customerResult = await defHttp.get({ |
| | | url: '/customer/customer/list', |
| | | params: { customerName: customerData.customerName }, |
| | | }); |
| | | console.log('客户信息数据:', customerResult); |
| | | if (customerResult && customerResult.records && customerResult.records.length > 0) { |
| | | formData.customer = customerResult.records[0]; |
| | | } |
| | | } catch (customerError) { |
| | | console.error('加载客户信息失败:', customerError); |
| | | } |
| | | } |
| | | |
| | | // 确保 emergencyStatus 正确设置(1=紧急,3=正常) |
| | | const emergencyStatus = Number(customerData.emergencyStatus); |
| | | if (emergencyStatus === 1 || emergencyStatus === 3) { |
| | |
| | | // 加载合同文件数据 |
| | | const loadContractFiles = async (id: string) => { |
| | | try { |
| | | const result = await defHttp.get({ |
| | | url: '/contract/contract/queryContractFileByMainId', |
| | | params: { id }, |
| | | }); |
| | | console.log('合同文件数据:', result); |
| | | // 这里可以根据返回的数据结构处理合同文件 |
| | | if (result && Array.isArray(result)) { |
| | | // 根据 fileType 区分合同文件和附件 |
| | | const contractFileList: any[] = []; |
| | | const attachmentFileList: any[] = []; |
| | | |
| | | result.forEach((file: any, index: number) => { |
| | | const url = file.appendixFile || file.url; |
| | | if (!url) { |
| | | return; |
| | | // 尝试多个接口获取合同文件信息 |
| | | const [fileResult1, fileResult2] = await Promise.allSettled([ |
| | | // 接口1: 专门的合同文件查询接口 |
| | | defHttp.get({ |
| | | url: '/contract/contract/queryContractFileByMainId', |
| | | params: { id }, |
| | | }), |
| | | // 接口2: 合同列表接口 |
| | | defHttp.get({ |
| | | url: '/contract/contract/list', |
| | | params: { id }, |
| | | }) |
| | | ]); |
| | | |
| | | console.log('合同文件接口1结果:', fileResult1); |
| | | console.log('合同文件接口2结果:', fileResult2); |
| | | |
| | | const contractFileList: any[] = []; |
| | | const attachmentFileList: any[] = []; |
| | | |
| | | // 处理接口1结果 |
| | | if (fileResult1.status === 'fulfilled' && fileResult1.value) { |
| | | const result = fileResult1.value; |
| | | if (result && Array.isArray(result)) { |
| | | result.forEach((file: any, index: number) => { |
| | | // 尝试不同的字段名获取文件URL |
| | | const url = file.appendixFile || file.url || file.fileUrl || file.filePath || file.path; |
| | | if (!url) { |
| | | return; |
| | | } |
| | | const fileItem = { |
| | | uid: file.id || file.uid || `${Date.now()}-${index}`, |
| | | name: file.fileName || file.name || file.originalFilename || getFileName(url), |
| | | url, |
| | | fileType: file.fileType || file.type, |
| | | }; |
| | | if (fileItem.fileType === '合同文件') { |
| | | contractFileList.push(fileItem); |
| | | } else if (fileItem.fileType === '合同附件') { |
| | | attachmentFileList.push(fileItem); |
| | | } else { |
| | | // 如果没有 fileType,根据文件名称判断 |
| | | const fileName = fileItem.name.toLowerCase(); |
| | | if (fileName.includes('合同') || fileName.includes('contract')) { |
| | | contractFileList.push(fileItem); |
| | | } else { |
| | | attachmentFileList.push(fileItem); |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | |
| | | // 处理接口2结果 |
| | | if (fileResult2.status === 'fulfilled' && fileResult2.value) { |
| | | const result = fileResult2.value; |
| | | if (result && result.records && result.records.length > 0) { |
| | | const contractRecord = result.records[0]; |
| | | |
| | | // 处理合同文件列表 |
| | | if (contractRecord.contractFileList) { |
| | | const fileList = Array.isArray(contractRecord.contractFileList) ? contractRecord.contractFileList : []; |
| | | fileList.forEach((file: any, index: number) => { |
| | | const url = file.url || file.fileUrl || file.filePath || file.path; |
| | | if (!url) { |
| | | return; |
| | | } |
| | | const fileItem = { |
| | | uid: file.id || file.uid || `${Date.now()}-${index}`, |
| | | name: file.fileName || file.name || file.originalFilename || getFileName(url), |
| | | url, |
| | | fileType: file.fileType || file.type, |
| | | }; |
| | | if (fileItem.fileType === '合同文件') { |
| | | contractFileList.push(fileItem); |
| | | } else if (fileItem.fileType === '合同附件') { |
| | | attachmentFileList.push(fileItem); |
| | | } else { |
| | | const fileName = fileItem.name.toLowerCase(); |
| | | if (fileName.includes('合同') || fileName.includes('contract')) { |
| | | contractFileList.push(fileItem); |
| | | } else { |
| | | attachmentFileList.push(fileItem); |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | const fileItem = { |
| | | uid: file.id || `${Date.now()}-${index}`, |
| | | name: file.fileName || getFileName(url), |
| | | url, |
| | | fileType: file.fileType, |
| | | }; |
| | | if (file.fileType === '合同文件') { |
| | | |
| | | // 处理单个合同文件 |
| | | if (contractRecord.contractFile) { |
| | | const url = contractRecord.contractFile; |
| | | const fileItem = { |
| | | uid: `contract-file-${Date.now()}`, |
| | | name: '合同文件.pdf', |
| | | url, |
| | | fileType: '合同文件', |
| | | }; |
| | | contractFileList.push(fileItem); |
| | | } else if (file.fileType === '合同附件') { |
| | | } |
| | | |
| | | // 处理单个附件 |
| | | if (contractRecord.attachment) { |
| | | const url = contractRecord.attachment; |
| | | const fileItem = { |
| | | uid: `attachment-${Date.now()}`, |
| | | name: '附件.pdf', |
| | | url, |
| | | fileType: '合同附件', |
| | | }; |
| | | attachmentFileList.push(fileItem); |
| | | } |
| | | }); |
| | | |
| | | contractFiles.value = contractFileList; |
| | | attachmentFiles.value = attachmentFileList; |
| | | } |
| | | } |
| | | |
| | | console.log('最终合同文件列表:', contractFileList); |
| | | console.log('最终附件列表:', attachmentFileList); |
| | | |
| | | contractFiles.value = contractFileList; |
| | | attachmentFiles.value = attachmentFileList; |
| | | } catch (error) { |
| | | console.error('加载合同文件失败:', error); |
| | | message.error('加载合同文件失败'); |
| | | } |
| | | }; |
| | | |
| | |
| | | { |
| | | title: '编辑人', |
| | | align: 'center', |
| | | dataIndex: 'changer', |
| | | dataIndex: 'createBy', |
| | | width: 120, |
| | | }, |
| | | { |
| | |
| | | label: '请输入关键词', |
| | | field: 'keyword', |
| | | component: 'Input', |
| | | colProps: { span: 6 }, |
| | | componentProps: { |
| | | placeholder: '语义词 / 标题', |
| | | }, |
| | |
| | | label: '开始时间', |
| | | field: 'startTime', |
| | | component: 'DatePicker', |
| | | colProps: { span: 6 }, |
| | | componentProps: { |
| | | valueFormat: 'YYYY-MM-DD', |
| | | }, |
| | |
| | | label: '结束时间', |
| | | field: 'endTime', |
| | | component: 'DatePicker', |
| | | colProps: { span: 6 }, |
| | | componentProps: { |
| | | valueFormat: 'YYYY-MM-DD', |
| | | }, |
| | | }, |
| | | ]; |
| | | |
| | | // 表单布局配置 |
| | | export const formLayoutConfig = { |
| | | compact: true, |
| | | baseColProps: { |
| | | xs: 24, |
| | | sm: 6, |
| | | md: 6, |
| | | lg: 6, |
| | | xl: 6, |
| | | xxl: 6, |
| | | }, |
| | | rowProps: { |
| | | gutter: 8, |
| | | }, |
| | | }; |
| | | |
| | | |
| | |
| | | import { reactive } from 'vue'; |
| | | import { BasicTable } from '/@/components/Table'; |
| | | import { useListPage } from '/@/hooks/system/useListPage'; |
| | | import { columns, searchFormSchema } from './RankingOff.data'; |
| | | import { columns, searchFormSchema, formLayoutConfig } from './RankingOff.data'; |
| | | // 使用 semanticWord 列表接口 |
| | | import { list as semanticWordList, getExportUrl, getImportUrl } from '/@/views/semanticword/SemanticWord.api'; |
| | | import { getDateByPicker } from '/@/utils'; |
| | |
| | | autoSubmitOnEnter: true, |
| | | showAdvancedButton: false, |
| | | showActionButtonGroup: true, |
| | | ...formLayoutConfig, |
| | | actionColOptions: { |
| | | span: 6, |
| | | style: { textAlign: 'right' }, |
| | | style: { textAlign: 'left' }, |
| | | }, |
| | | }, |
| | | beforeFetch: (params) => { |
| | |
| | | { |
| | | title: '编辑人', |
| | | align: 'center', |
| | | dataIndex: 'changer', |
| | | dataIndex: 'createBy', |
| | | width: 120, |
| | | }, |
| | | { |
| | |
| | | label: '请输入关键词', |
| | | field: 'keyword', |
| | | component: 'Input', |
| | | colProps: { span: 6 }, |
| | | componentProps: { |
| | | placeholder: '语义词 / 标题', |
| | | }, |
| | |
| | | label: '开始时间', |
| | | field: 'startTime', |
| | | component: 'DatePicker', |
| | | colProps: { span: 6 }, |
| | | componentProps: { |
| | | valueFormat: 'YYYY-MM-DD', |
| | | }, |
| | |
| | | label: '结束时间', |
| | | field: 'endTime', |
| | | component: 'DatePicker', |
| | | colProps: { span: 6 }, |
| | | componentProps: { |
| | | valueFormat: 'YYYY-MM-DD', |
| | | }, |
| | | }, |
| | | ]; |
| | | |
| | | // 表单布局配置 |
| | | export const formLayoutConfig = { |
| | | compact: true, |
| | | baseColProps: { |
| | | xs: 24, |
| | | sm: 6, |
| | | md: 6, |
| | | lg: 6, |
| | | xl: 6, |
| | | xxl: 6, |
| | | }, |
| | | rowProps: { |
| | | gutter: 8, |
| | | }, |
| | | }; |
| | | |
| | | |
| | |
| | | import { reactive } from 'vue'; |
| | | import { BasicTable } from '/@/components/Table'; |
| | | import { useListPage } from '/@/hooks/system/useListPage'; |
| | | import { columns, searchFormSchema } from './RankingOn.data'; |
| | | import { columns, searchFormSchema, formLayoutConfig } from './RankingOn.data'; |
| | | // 使用 semanticWord 列表接口 |
| | | import { list as semanticWordList, getExportUrl, getImportUrl } from '/@/views/semanticword/SemanticWord.api'; |
| | | import { getDateByPicker } from '/@/utils'; |
| | |
| | | autoSubmitOnEnter: true, |
| | | showAdvancedButton: false, |
| | | showActionButtonGroup: true, |
| | | ...formLayoutConfig, |
| | | actionColOptions: { |
| | | span: 6, |
| | | style: { textAlign: 'right' }, |
| | | style: { textAlign: 'left' }, |
| | | }, |
| | | }, |
| | | beforeFetch: (params) => { |
| | |
| | | label: "语义词", |
| | | field: 'word', |
| | | component: 'JInput', |
| | | componentProps: { |
| | | style: { width: '220px' } // 增加宽度,确保文字显示完整 |
| | | }, |
| | | //colProps: {span: 6}, |
| | | }, |
| | | }, |
| | | { |
| | | label: "露出词", |
| | | field: 'outWord', |
| | | component: 'JInput', |
| | | componentProps: { |
| | | style: { width: '220px' } // 增加宽度,确保文字显示完整 |
| | | }, |
| | | //colProps: {span: 6}, |
| | | }, |
| | | }, |
| | | { |
| | | label: "状态", |
| | | field: 'status', |
| | |
| | | { label: '已通过', value: '3' }, |
| | | { label: '已驳回', value: '2' }, |
| | | { label: '已上词', value: '5' }, |
| | | ] |
| | | ], |
| | | style: { width: '180px' } // 增加宽度,确保文字显示完整 |
| | | }, |
| | | //colProps: {span: 6}, |
| | | }, |
| | | }, |
| | | // { |
| | | // label: "文案编辑", |
| | | // field: 'changer', |
| | |
| | | // dictCode:"sys_user,realname,id" |
| | | // }, |
| | | // //colProps: {span: 6}, |
| | | // }, |
| | | // }, |
| | | ]; |
| | | //表单数据 |
| | | export const formSchema: FormSchema[] = [ |
| | |
| | | showAdvancedButton: true, |
| | | fieldMapToNumber: [], |
| | | fieldMapToTime: [], |
| | | compact: true, // 启用紧凑模式 |
| | | baseColProps: { |
| | | xs: 24, |
| | | sm: 6, |
| | | md: 6, |
| | | lg: 6, |
| | | xl: 6, |
| | | xxl: 6, |
| | | }, |
| | | rowProps: { |
| | | gutter: 8, |
| | | }, |
| | | actionColOptions: { |
| | | span: 8, |
| | | style: { textAlign: 'left', marginLeft: '0px' }, |
| | | }, |
| | | }, |
| | | beforeFetch: (params) => { |
| | | if (params && fieldPickers) { |
| | |
| | | align-items: center; |
| | | gap: 20px; |
| | | } |
| | | |
| | | /* 更具体的样式选择器,确保搜索表单更靠左 */ |
| | | :deep(.basic-table) { |
| | | padding-left: 0 !important; |
| | | } |
| | | |
| | | :deep(.basic-table-search) { |
| | | margin-left: 0 !important; |
| | | padding-left: 0 !important; |
| | | } |
| | | |
| | | :deep(.ant-form) { |
| | | margin-left: 0 !important; |
| | | padding-left: 0 !important; |
| | | width: 100%; |
| | | } |
| | | |
| | | :deep(.ant-row) { |
| | | margin-left: 0 !important; |
| | | width: 100%; |
| | | justify-content: flex-start !important; |
| | | } |
| | | |
| | | :deep(.ant-form-item) { |
| | | margin-right: 16px !important; |
| | | margin-left: 0 !important; |
| | | } |
| | | |
| | | :deep(.ant-form-item-label) { |
| | | padding-right: 8px !important; |
| | | } |
| | | |
| | | :deep(.ant-form-item-control) { |
| | | min-width: 180px; |
| | | } |
| | | </style> |
| | |
| | | label: "语义词", |
| | | field: 'word', |
| | | component: 'JInput', |
| | | componentProps: { |
| | | style: { width: '200px' } // 适当宽度,确保文字显示完整 |
| | | }, |
| | | //colProps: {span: 6}, |
| | | }, |
| | | }, |
| | | { |
| | | label: "状态", |
| | | field: 'status', |
| | |
| | | options: [ |
| | | { label: '待分配', value: '1' }, |
| | | { label: '已分配', value: '7' }, |
| | | ] |
| | | ], |
| | | style: { width: '200px' } // 适当宽度,确保文字显示完整 |
| | | }, |
| | | }, |
| | | // { |
| | |
| | | // componentProps:{ |
| | | // dictCode:"sys_user,realname,id", |
| | | // dictUrl: "/sys/user/userRoleList", |
| | | // dictQueryParam: {roleId: ROLE_ID_COPY_EDITOR} |
| | | // dictQueryParam: {roleId: ROLE_ID_COPY_EDITOR}, |
| | | // style: { width: '200px' } // 适当宽度,确保文字显示完整 |
| | | // }, |
| | | // //colProps: {span: 6}, |
| | | // }, |
| | | // }, |
| | | ]; |
| | | //表单数据 |
| | | export const formSchema: FormSchema[] = [ |
| | |
| | | showAdvancedButton: true, |
| | | fieldMapToNumber: [], |
| | | fieldMapToTime: [], |
| | | compact: true, // 启用紧凑模式 |
| | | baseColProps: { |
| | | xs: 24, |
| | | sm: 6, |
| | | md: 6, |
| | | lg: 6, |
| | | xl: 6, |
| | | xxl: 6, |
| | | }, |
| | | rowProps: { |
| | | gutter: 8, |
| | | }, |
| | | actionColOptions: { |
| | | span: 8, |
| | | style: { textAlign: 'left' }, |
| | | }, |
| | | }, |
| | | actionColumn: { |
| | | width: 150, |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | /* 更具体的样式选择器,确保搜索表单更靠左 */ |
| | | :deep(.basic-table) { |
| | | padding-left: 0 !important; |
| | | } |
| | | |
| | | :deep(.basic-table-search) { |
| | | margin-left: 0 !important; |
| | | padding-left: 0 !important; |
| | | } |
| | | |
| | | :deep(.ant-form) { |
| | | margin-left: 0 !important; |
| | | padding-left: 0 !important; |
| | | width: 100%; |
| | | } |
| | | |
| | | :deep(.ant-row) { |
| | | margin-left: 0 !important; |
| | | width: 100%; |
| | | justify-content: flex-start !important; |
| | | } |
| | | |
| | | :deep(.ant-form-item) { |
| | | margin-right: 16px !important; |
| | | margin-left: 0 !important; |
| | | } |
| | | |
| | | :deep(.ant-form-item-label) { |
| | | padding-right: 8px !important; |
| | | } |
| | | |
| | | :deep(.ant-form-item-control) { |
| | | min-width: 180px; |
| | | } |
| | | </style> |
| | |
| | | showAdvancedButton: true, |
| | | fieldMapToNumber: [], |
| | | fieldMapToTime: [], |
| | | compact: true, // 启用紧凑模式 |
| | | baseColProps: { |
| | | xs: 24, |
| | | sm: 6, |
| | | md: 6, |
| | | lg: 6, |
| | | xl: 6, |
| | | xxl: 6, |
| | | }, |
| | | rowProps: { |
| | | gutter: 8, |
| | | }, |
| | | actionColOptions: { |
| | | span: 8, |
| | | style: { textAlign: 'left' }, |
| | | }, |
| | | }, |
| | | actionColumn: { |
| | | width: 120, |