瀏覽代碼

feat: 新增线索管理、线索列表、服务商线索审核、服务商无效线索、线索登记页面

liyang 4 月之前
父節點
當前提交
e336f64ead

+ 168 - 0
src/views/market-manage/external-manage/clue-management/clue-list/index.vue

@@ -0,0 +1,168 @@
+<template>
+  <div class="table-demo">
+    <bs-table v-bind="tableOptions">
+      <template #searchRight>
+        <div>
+          <a-button type="primary" @click="openCuleDrawer">
+            <span>线索登记</span>
+          </a-button>
+        </div>
+      </template>
+    </bs-table>
+
+
+    <add-or-edit-drawer ref="addOrEditDrawerRef"/>
+  </div>
+</template>
+
+<script setup lang="jsx">
+import BsTable, {useBsTable} from '/@/components/BsUi/Table/index.js';
+import {onMounted, ref} from 'vue';
+import {pick} from 'lodash';
+import AddOrEditDrawer from '/@/views/table-demo/components/AddOrEditDrawer.vue';
+import {clientManageApi} from '/@/api/market-manage/index.js';
+import {useRouter} from 'vue-router';
+
+const addOrEditDrawerRef = ref(null);
+const router = useRouter();
+const {
+  tableOptions,
+  setTablePropsValue: setValue,
+  getTablePropsValue: getValue,
+} = useBsTable({
+  tableOptions: {
+    // url:''
+    gridOptions: {
+      loading: false,
+      columns: [
+        {
+          field: 'id',
+          title: '项目名称',
+        },
+        {
+          field: 'name',
+          title: '项目ID',
+        },
+        {
+          field: 'name1',
+          title: '项目地址',
+        },
+        {
+          field: 'name2',
+          title: '项目状态',
+        },
+        {
+          field: 'name',
+          title: '甲方',
+        },
+        {
+          field: 'name',
+          title: '预计招标日期',
+        },
+        {
+          field: 'name',
+          title: '概算金额(万)',
+        },
+        {
+          field: 'name',
+          title: '分厂/几期/机组',
+        },
+        {
+          field: 'name',
+          title: '项目来源',
+        },
+        {
+          field: 'name',
+          title: '项目类型',
+        },
+        {
+          field: 'name',
+          title: '工程属性',
+        },
+        {
+          field: 'name',
+          title: '业务类型',
+        },
+        {
+          field: 'name',
+          title: '归属营销经理',
+        },
+        {
+          field: 'name',
+          title: '归属营销部门',
+        },
+        {
+          field: 'name',
+          title: '创建人',
+        },
+        {
+          field: 'name',
+          title: '创建时间',
+        },
+        {
+          field: 'opt',
+          title: '操作',
+          width: '120px',
+          fixed: 'right',
+          align: 'center',
+          slots: {
+            default({row, column}) {
+              return (
+                  <a-button
+                      type='text'
+                      size='small'
+                      onClick={() => {
+                        goDetailPage(row);
+                      }}
+                  >
+                    查看详情
+                  </a-button>
+              );
+            },
+          },
+        },
+      ],
+    },
+    searchConfig: {
+      enabled: true,
+      fieldSpan: 4,
+      fields: [
+        {
+          field: 'name',
+          label: '',
+          component: 'a-input',
+          componentProps: {
+            placeholder: '请输入项目名称',
+          },
+        },
+      ],
+      onSearch() {
+        fetchTableData();
+      },
+      onReset() {
+        fetchTableData();
+      },
+    },
+    pagerConfig: {
+      enabled: true,
+      pageSize: 10,
+      pageNum: 1,
+      total: 0,
+    },
+    toolbarConfig: {
+      onRefresh() {
+        fetchTableData();
+      },
+    },
+  },
+});
+
+const openCuleDrawer = () => {
+  router.push('/market-manage/external-manage/clue-management/clue-registration');
+}
+</script>
+
+<style scoped lang="scss">
+.table-demo {
+}
+</style>

+ 644 - 0
src/views/market-manage/external-manage/clue-management/clue-registration/index.vue

@@ -0,0 +1,644 @@
+<template>
+  <a-card>
+    <a-form class="smart-query-form" ref="stepFormRef" labelWrap :label-col="labelCol" :model="formModel"
+            :rules="formRules">
+      <div class="approval-steps">
+        <div>
+          <div class="basic-title">
+            <div class="basic-title-left">
+              <div class="basic-title-line"></div>
+              <span class="basic-title-text">线索登记</span>
+            </div>
+            <div class="basic-title-right">
+              <a-button type="primary" @click="reset">重置</a-button>
+              <a-button type="primary" @click="submit">提交</a-button>
+            </div>
+          </div>
+          <div class="steps-content">
+            <a-row :gutter="16">
+              <a-col :span="8">
+                <a-form-item label="项目类型" name="serviceProvider">
+                  <a-select
+                      v-model:value="formState.serviceProvider"
+                      placeholder="请选择"
+                      :options="serviceProviderOptions"
+                  />
+                </a-form-item>
+              </a-col>
+              <a-col :span="16">
+                <a-form-item label="线索名称">
+                  <a-input
+                      v-model:value="formState.projectName"
+                      placeholder="请输入线索名称"
+                  />
+                </a-form-item>
+              </a-col>
+
+            </a-row>
+            <a-row :gutter="16">
+              <a-col :span="24">
+                <a-form-item label="项目名称" name="socialCode">
+                  <a-input
+                      v-model:value="formState.projectName"
+                      placeholder="自动生成(甲方-分厂-几期-机组-工程属性)"
+                  />
+                </a-form-item>
+              </a-col>
+            </a-row>
+            <a-row :gutter="16">
+              <a-col :span="8">
+                <a-form-item label="线索来源" name="serviceProvider">
+                  <a-select
+                      v-model:value="formState.serviceProvider"
+                      placeholder="服务商提供"
+                      :options="projectAttributeOptions"
+                  />
+                </a-form-item>
+              </a-col>
+              <a-col :span="8">
+                <a-form-item label="服务商名称" name="serviceProvider">
+                  <a-select
+                      v-model:value="formState.serviceProvider"
+                      placeholder="请选择"
+                      :options="ownerUnitOptions"
+                  />
+                </a-form-item>
+              </a-col>
+              <a-col :span="8">
+                <a-form-item label="工程属性" name="serviceProvider">
+                  <a-select
+                      v-model:value="formState.serviceProvider"
+                      placeholder="请选择"
+                      :options="ownerUnitOptions1"
+                  />
+                </a-form-item>
+              </a-col>
+            </a-row>
+            <a-row :gutter="16">
+              <a-col :span="8">
+                <a-form-item label="地区" name="region">
+                  <a-cascader
+                      v-model:value="formState.region"
+                      :options="regionOptions"
+                      placeholder="请选择"
+                  />
+                </a-form-item>
+              </a-col>
+              <a-col :span="8">
+                <a-form-item label="省市区" name="region">
+                  <a-cascader
+                      v-model:value="formState.region"
+                      :options="regionOptions"
+                      placeholder="请选择"
+                  />
+                </a-form-item>
+              </a-col>
+              <a-col :span="8">
+                <a-form-item label="项目地址">
+                  <a-input
+                      v-model:value="formState.projectName"
+                      placeholder="请输入"
+                  />
+                </a-form-item>
+              </a-col>
+            </a-row>
+            <a-row :gutter="16">
+              <a-col :span="12">
+                <a-form-item label="业主单位">
+                  <div class="flex-container">
+                    <a-select
+                        v-model:value="formState.ownerUnit"
+                        placeholder="请选择"
+                        style="flex: 1; margin-right: 8px"
+                        :options="ownerUnitOptions"
+                    />
+                    <a-radio-group v-model:value="formState.isOwnerPartyA" button-style="solid">
+                      <a-radio-button value="yes">甲方</a-radio-button>
+                    </a-radio-group>
+                  </div>
+                </a-form-item>
+              </a-col>
+              <a-col :span="12">
+                <a-form-item label="设计单位">
+                  <div class="flex-container">
+                    <a-select
+                        v-model:value="formState.contractorUnit"
+                        placeholder="请选择"
+                        style="flex: 1; margin-right: 8px"
+                        :options="contractorUnitOptions"
+                    />
+                    <a-radio-group v-model:value="formState.isContractorPartyA" button-style="solid">
+                      <a-radio-button value="yes">甲方</a-radio-button>
+                    </a-radio-group>
+                  </div>
+                </a-form-item>
+              </a-col>
+            </a-row>
+            <a-row :gutter="16">
+              <a-col :span="12">
+                <a-form-item label="总承包单位">
+                  <div class="flex-container">
+                    <a-select
+                        v-model:value="formState.ownerUnit"
+                        placeholder="请选择"
+                        style="flex: 1; margin-right: 8px"
+                        :options="ownerUnitOptions"
+                    />
+                    <a-radio-group v-model:value="formState.isOwnerPartyA" button-style="solid">
+                      <a-radio-button value="yes">甲方</a-radio-button>
+                    </a-radio-group>
+                  </div>
+                </a-form-item>
+              </a-col>
+              <a-col :span="12">
+                <a-form-item label="招标代理单位">
+                  <div class="flex-container">
+                    <a-select
+                        v-model:value="formState.contractorUnit"
+                        placeholder="请选择"
+                        style="flex: 1; margin-right: 8px"
+                        :options="contractorUnitOptions"
+                    />
+                    <a-radio-group v-model:value="formState.isContractorPartyA" button-style="solid">
+                      <a-radio-button value="yes">甲方</a-radio-button>
+                    </a-radio-group>
+                  </div>
+                </a-form-item>
+              </a-col>
+            </a-row>
+            <a-row :gutter="16">
+              <a-col :span="8">
+                <a-form-item label="是否联合体" name="serviceProvider">
+                  <a-select
+                      v-model:value="formState.serviceProvider"
+                      placeholder="请选择"
+                      :options="serviceProviderOptions"
+                  />
+                </a-form-item>
+              </a-col>
+              <a-col :span="16">
+                <a-form-item label="联合体情况" name="serviceProvider">
+                  <a-input
+                      v-model:value="formState.projectName"
+                      placeholder="请输入"
+                  />
+                </a-form-item>
+              </a-col>
+            </a-row>
+            <a-row :gutter="16">
+              <a-col :span="8">
+                <a-form-item label="项目所属行业" name="serviceProvider">
+                  <a-select
+                      v-model:value="formState.serviceProvider"
+                      placeholder="请选择"
+                      :options="ownerUnitOptions5"
+                  />
+                </a-form-item>
+              </a-col>
+              <a-col :span="8">
+                <a-form-item label="业务类型" name="serviceProvider">
+                  <a-select
+                      v-model:value="formState.serviceProvider"
+                      placeholder="请选择"
+                      :options="ownerUnitOptions4"
+                  />
+                </a-form-item>
+              </a-col>
+              <a-col :span="8">
+                <a-form-item label="招标平台" name="serviceProvider">
+                  <a-input v-model:value="formModel.customerRemark" placeholder="请输入"/>
+                </a-form-item>
+              </a-col>
+            </a-row>
+            <a-row :gutter="16">
+              <a-col :span="8">
+                <a-form-item label="项目总概算" name="serviceProvider">
+                  <a-input v-model:value="formModel.customerRemark" placeholder="自动生成(各标段概算之和)"/>
+                </a-form-item>
+              </a-col>
+              <a-col :span="8">
+                <a-form-item label="项目资金来源" name="serviceProvider">
+                  <a-select
+                      v-model:value="formState.serviceProvider"
+                      placeholder="请选择"
+                      :options="ownerUnitOptions3"
+                  />
+                </a-form-item>
+              </a-col>
+              <a-col :span="8">
+                <a-form-item label="分厂/几期/机组" name="serviceProvider">
+                  <a-input v-model:value="formModel.customerRemark" placeholder="请输入"/>
+                </a-form-item>
+              </a-col>
+            </a-row>
+            <a-row :gutter="16">
+              <a-col :span="24">
+                <a-form-item label="项目背景" name="customerRemark" class="smart-query-form-item">
+                  <a-input v-model:value="formModel.customerRemark" placeholder="请输入"/>
+                </a-form-item>
+              </a-col>
+            </a-row>
+            <a-row :gutter="16">
+              <a-col :span="24">
+                <a-form-item label="项目阶段" name="customerRemark" class="smart-query-form-item">
+                  <a-input v-model:value="formModel.customerRemark" placeholder="请输入"/>
+                </a-form-item>
+              </a-col>
+            </a-row>
+            <a-row :gutter="16">
+              <a-col :span="8">
+                <a-form-item label="归属营销人员" name="customerRemark" class="smart-query-form-item">
+                  <a-select
+                      v-model:value="formState.serviceProvider"
+                      placeholder="请选择"
+                      :options="ownerUnitOptions5"
+                  />
+                </a-form-item>
+              </a-col>
+            </a-row>
+          </div>
+        </div>
+        <div>
+          <div class="basic-title">
+            <div class="basic-title-left">
+              <div class="basic-title-line"></div>
+              <span class="basic-title-text">协作团队</span>
+            </div>
+            <div class="basic-title-right">
+              <!-- <a-button type="primary">提交</a-button> -->
+            </div>
+          </div>
+          <div class="steps-content">
+            <a-button type="dashed" @click="addTeam" block>
+              <plus-outlined /> 添加成员
+            </a-button>
+            <a-table
+                :columns="teamColumns"
+                :data-source="teamData"
+                :pagination="false"
+                bordered
+            >
+              <template #bodyCell="{ column, record }">
+                <template v-if="column.key === 'action'">
+                  <a-button type="link" danger @click="removeTeam(record.key)">删除</a-button>
+                </template>
+              </template>
+            </a-table>
+          </div>
+        </div>
+        <div>
+          <div class="basic-title">
+            <div class="basic-title-left">
+              <div class="basic-title-line"></div>
+              <span class="basic-title-text">其他信息</span>
+            </div>
+            <div class="basic-title-right">
+              <!-- <a-button type="primary">提交</a-button> -->
+            </div>
+          </div>
+          <div class="steps-content">
+            <a-row :gutter="16" class="smart-query-form-row">
+              <a-col :span="24">
+                <a-form-item label="附件">
+                  <a-upload-dragger
+                      v-model:file-list="fileList"
+                      name="file"
+                      :multiple="true"
+                      :before-upload="beforeUpload"
+                      @change="handleUploadChange"
+                      :accept="'.png,.jpg,.doc,.pdf,.mp4,.avi'"
+                  >
+                    <p class="ant-upload-drag-icon">
+                      <inbox-outlined></inbox-outlined>
+                    </p>
+                    <p class="ant-upload-text">点击或将文件拖拽到这里上传</p>
+                    <p class="ant-upload-hint">支持:png、jpg、doc、pdf、mp4、avi...</p>
+                  </a-upload-dragger>
+                </a-form-item>
+              </a-col>
+            </a-row>
+          </div>
+        </div>
+      </div>
+    </a-form>
+  </a-card>
+</template>
+<script setup>
+import {onMounted, reactive, ref, useAttrs} from 'vue';
+import {
+  PlusOutlined,
+  InboxOutlined,
+} from '@ant-design/icons-vue';
+import {useRouter} from 'vue-router';
+import {message, Modal} from 'ant-design-vue';
+import _ from 'lodash';
+import {clientManageApi} from '/@/api/market-manage/index.js';
+import AreaCascader from '/@/components/framework/area-cascader/index.vue';
+import DictSelect from '/@/components/support/dict-select/index.vue';
+import Upload from '/@/components/support/file-upload/index.vue';
+import {FILE_FOLDER_TYPE_ENUM} from '/@/constants/support/file-const';
+
+const stepFormRef = ref(null);
+const router = useRouter();
+
+// --------------------- 数据 ---------------------
+const formModel = reactive({
+  customerCode: undefined, //客户编码
+  customerName: undefined, //客户名称
+  socialCode: undefined, //社会统一信用代码
+  partnerLevel: undefined, //客户级别
+  customerStatus: undefined, //客户状态
+  province: undefined, //省份
+  provinceName: undefined,
+  city: undefined, //城市
+  cityName: undefined,
+  area: undefined, //区或县
+  areaName: undefined,
+  address: undefined, //详细地址
+  customerType: undefined, //客户类型
+  customerManager: undefined, //客户对接人
+  customerManagerMobile: undefined, //客户对接人电话
+  companyRegisterCapital: undefined, //注册资本
+  companyRegisterDate: undefined, //注册时间
+  customerDescription: undefined, //公司简介
+  customerNature: undefined, //经营范围
+  customerRemark: undefined, //备注
+  invoiceTitle: undefined, //发票抬头
+  invoiceCode: undefined, //开票税号
+  invoiceAddress: undefined, //开票地址
+  invoiceMobile: undefined, //开票电话
+  invoiceBankName: undefined, //开户银行
+  invoiceBankAccount: undefined, //银行账户
+  invoiceType: undefined, //开票类型
+  attachment: undefined, //附件集合
+});
+// 表单数据
+const formState = reactive({
+  projectType: 'project',
+  clueName: '',
+  projectName: '',
+  clueSource: 'serviceProvider',
+  serviceProvider: undefined,
+  projectAttribute: undefined,
+  region: undefined,
+  projectAddress: '',
+  ownerUnit: undefined,
+  designUnit: undefined,
+  contractorUnit: undefined,
+  tenderAgent: undefined,
+  isConsortium: undefined,
+  consortiumDescription: '',
+  industry: undefined,
+  businessType: undefined,
+  biddingPlatform: '',
+  totalBudget: '',
+  fundingSource: undefined,
+  factoryPhaseUnit: '',
+  projectBackground: '',
+  projectStage: '',
+  marketingPerson: undefined,
+  isOwnerPartyA: undefined,
+  isContractorPartyA: undefined,
+  isDesignPartyA: undefined,
+  isTenderPartyA: undefined,
+});
+
+// --------------------- 校验规则 ---------------------
+const formRules = {
+  // customerName: [{ required: true, message: '请输入客户名称', trigger: 'change' }],
+};
+const teamColumns = [
+  {
+    title: '序号',
+    dataIndex: 'key',
+    key: 'key',
+    width: 80,
+  },
+  {
+    title: '营销经理',
+    dataIndex: 'manager',
+    key: 'manager',
+  },
+  {
+    title: '营销团队',
+    dataIndex: 'team',
+    key: 'team',
+  },
+  {
+    title: '支持说明',
+    dataIndex: 'support',
+    key: 'support',
+  },
+  {
+    title: '操作',
+    key: 'action',
+    width: 100,
+  },
+];
+const teamData = ref([
+  {
+    key: '1',
+    manager: '张经理',
+    team: '一团队',
+    support: '',
+  },
+  {
+    key: '2',
+    manager: '王经理',
+    team: 'XX团队',
+    support: '',
+  },
+]);
+const addTeam = () => {
+  const newKey = String(teamData.value.length + 1);
+  teamData.value.push({
+    key: newKey,
+    manager: '',
+    team: '',
+    support: '',
+  });
+};
+const removeTeam = (key) => {
+  teamData.value = teamData.value.filter(item => item.key !== key);
+};
+const labelCol = {style: {width: '110px'}};
+
+// ----------------------- 上传附件 ----------------------------
+// 已上传的附件列表
+const defaultFileList = ref([]);
+
+function changeAttachment(fileList) {
+  defaultFileList.value = fileList;
+  formModel.attachment = _.isEmpty(fileList) ? [] : fileList;
+}
+
+// ----------------------- 步骤相关 ---------------------------
+
+const submit = () => {
+  console.log('formModel', formModel);
+  router.push('/market-manage/external-manage/clue-management/clue-list');
+  // stepFormRef.value
+  //     .validateFields()
+  //     .then((values) => {
+  //       Modal.confirm({
+  //         title: '提示',
+  //         content: '确定要提交吗?',
+  //         okText: '确认',
+  //         onOk() {
+  //           postFormData();
+  //         },
+  //         cancelText: '取消',
+  //         onCancel() {
+  //         },
+  //       });
+  //     })
+  //     .catch((error) => {
+  //       console.log('step1_error', error);
+  //     });
+};
+
+const postFormData = () => {
+  customerApi.CustomerAddition(formModel).then((res) => {
+    message.success('提交成功');
+    router.push({path: '/teamwork/customer-manage/customer-list'});
+  });
+};
+//------------------------地区-------------------------------------
+
+const provinceCityDistrict = ref([]);
+
+
+// 文件上传
+const fileList = ref([]);
+
+const handleUploadChange = (info) => {
+  let fileList = [...info.fileList];
+  fileList = fileList.slice(-5); // 限制上传数量
+  fileList.value = fileList;
+};
+
+const beforeUpload = (file) => {
+  const isLt10M = file.size / 1024 / 1024 < 10;
+  if (!isLt10M) {
+    message.error('文件大小不能超过10MB!');
+    return false;
+  }
+  return true;
+};
+const serviceProviderOptions = ref([
+  {value: 'provider1', label: '项目类'},
+  {value: 'provider2', label: '贸易类'},
+]);
+
+const projectAttributeOptions = ref([
+  {value: 'attribute1', label: '自主开发'},
+  {value: 'attribute2', label: '转介绍'},
+  {value: 'attribute3', label: '服务商提供'},
+  {value: 'attribute4', label: '市场活动'},
+]);
+const ownerUnitOptions = ref([
+  {value: 'owner1', label: '国内客户'},
+  {value: 'owner2', label: '国外客户'},
+]);
+const ownerUnitOptions1 = ref([
+  {value: 'owner1', label: '新建'},
+  {value: 'owner2', label: '旧改'},
+]);
+const ownerUnitOptions2 = ref([
+  {value: 'owner1', label: '是'},
+  {value: 'owner2', label: '否'},
+]);
+const ownerUnitOptions3 = ref([
+  {value: 'owner1', label: '客户提供'},
+]);
+const ownerUnitOptions4 = ref([
+  {value: 'owner1', label: '业务一部'},
+  {value: 'owner2', label: '业务二部'},
+  {value: 'owner3', label: '业务三部'},
+]);
+const ownerUnitOptions5 = ref([
+  {value: 'owner1', label: '政府机构'},
+  {value: 'owner2', label: '民营企业'},
+]);
+
+const regionOptions = ref([
+  {
+    value: 'zhejiang',
+    label: '浙江省',
+    children: [
+      {
+        value: 'hangzhou',
+        label: '杭州市',
+        children: [
+          {value: 'xihu', label: '西湖区'},
+        ],
+      },
+    ],
+  },
+  // 其他省份...
+]);
+</script>
+
+<style scoped lang="less">
+.flex-container {
+  display: flex;
+  align-items: center;
+}
+
+.approval-steps {
+  display: flex;
+  flex-direction: column;
+  gap: 20px;
+  // width: 1350px;
+  margin: 0 auto;
+
+  .basic-title {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    width: 100%;
+    height: 40px;
+    padding: 0 16px 4px 16px;
+    border-bottom: 2px solid #f6f6f6;
+    background: #ffffff;
+    border-top-left-radius: 8px;
+    border-top-right-radius: 8px;
+
+    .basic-title-left {
+      height: 100%;
+      display: flex;
+      align-items: center;
+
+      .basic-title-line {
+        width: 4px;
+        height: 20px;
+        border-radius: 4px;
+        background: #267ef8;
+        margin-right: 5px;
+      }
+
+      .basic-title-text {
+        font-size: 16px;
+        font-style: normal;
+        font-weight: 600;
+        line-height: 20px;
+      }
+    }
+
+    .basic-title-right {
+      display: flex;
+      gap: 10px;
+    }
+  }
+
+  .steps-content {
+    margin-top: 14px;
+  }
+
+  .steps-action {
+    display: flex;
+    justify-content: center;
+    margin-top: 18px;
+  }
+}
+</style>

+ 192 - 0
src/views/market-manage/external-manage/clue-management/clue-review/index.vue

@@ -0,0 +1,192 @@
+<template>
+    <div class="table-demo">
+        <bs-table v-bind="tableOptions">
+            <template #searchRight>
+            </template>
+        </bs-table>
+
+        <add-or-edit-drawer ref="addOrEditDrawerRef" />
+    </div>
+</template>
+
+<script setup>
+    import BsTable, { useBsTable } from '/@/components/BsUi/Table/index.js';
+    import { onMounted, ref } from 'vue';
+    import { pick } from 'lodash';
+    import AddOrEditDrawer from '/@/views/table-demo/components/AddOrEditDrawer.vue';
+    import { clientManageApi } from '/@/api/market-manage/index.js';
+
+    const addOrEditDrawerRef = ref(null);
+
+    const {
+        tableOptions,
+        setTablePropsValue: setValue,
+        getTablePropsValue: getValue,
+    } = useBsTable({
+        tableOptions: {
+            gridOptions: {
+                loading: false,
+                columns: [
+                    {
+                        field: 'id',
+                        title: '状态',
+                    },
+                    {
+                        field: 'name',
+                        title: '流水号',
+                    },
+                    {
+                        field: 'name1',
+                        title: '项目名称',
+                    },
+                    {
+                        field: 'name2',
+                        title: '项目ID',
+                    },
+                    {
+                        field: 'name',
+                        title: '项目地址',
+                    },
+                    {
+                        field: 'name',
+                        title: '预计合同金额(万)',
+                    },
+                    {
+                        field: 'name',
+                        title: '项目类型',
+                    },
+                    {
+                        field: 'name',
+                        title: '产品类型',
+                    },
+                    {
+                        field: 'name',
+                        title: '预计开标日期',
+                    },
+                    {
+                        field: 'name',
+                        title: '操作人',
+                    },
+                    {
+                        field: 'name',
+                        title: '操作时间',
+                    },
+                    {
+                        field: 'action',
+                        title: '操作',
+                    },
+                ],
+            },
+            searchConfig: {
+                enabled: true,
+                fieldSpan: 4,
+                fields: [
+                    {
+                        field: 'name',
+                        label: '',
+                        component: 'a-input',
+                        componentProps: {
+                            placeholder: '请输入项目名称',
+                        },
+                    },
+                    // {
+                    //   field: 'name',
+                    //   label: '',
+                    //   component: 'a-select',
+                    //   componentProps: {
+                    //     placeholder: '请选择地址',
+                    //   },
+                    // },
+                    // {
+                    //   field: 'name',
+                    //   label: '',
+                    //   component: 'a-select',
+                    //   componentProps: {
+                    //     placeholder: '请选择服务商类型',
+                    //   },
+                    // },
+                ],
+                onSearch() {
+                    fetchTableData();
+                },
+                onReset() {
+                    fetchTableData();
+                },
+            },
+            // pagerConfig: {
+            //   enabled: true,
+            //   pageSize: 10,
+            //   pageNum: 1,
+            //   total: 100,
+            //   onChange: () => {
+            //     fetchTableData();
+            //   },
+            // },
+            toolbarConfig: {
+                onRefresh() {
+                    fetchTableData();
+                },
+            },
+        },
+    });
+
+    const getSearchParams = () => {
+        return getValue('searchConfig.data');
+    };
+    const getPageInfo = () => {
+        return pick(getValue('pagerConfig.pageInfo'), ['pageNum', 'pageSize']);
+    };
+
+    const fetchTableData = () => {
+        setValue('gridOptions.loading', true);
+
+        const params = {
+            ...getSearchParams(),
+            ...getPageInfo(),
+        };
+
+        //
+        // clientManageApi.interventionsList(params).then((res) => {
+        //   console.log('res', res);
+        //   setValue('gridOptions.data', res.data.list);
+        // });
+
+        const TableDate = [
+            {
+                id: '1111111',
+                name: 'John Doe',
+                name1: '1212212',
+                name2: '1313131',
+            },
+            {
+                id: '22222',
+                name: 'John Doe',
+                name1: '1212212',
+                name2: '1313131',
+            },
+            {
+                id: '33333',
+                name: 'John sssssDoe',
+                name1: '12122sss12',
+                name2: '13sss13131',
+            },
+        ];
+        setTimeout(() => {
+            setValue('gridOptions.data', TableDate);
+            setValue('gridOptions.loading', false);
+        }, 1000);
+    };
+
+    onMounted(() => {
+        console.log('表格已加载');
+        fetchTableData();
+    });
+
+    const openEditDrawer = () => {
+        addOrEditDrawerRef.value.showDrawer();
+    };
+</script>
+
+<style scoped lang="scss">
+    .table-demo {}
+</style>

+ 206 - 0
src/views/market-manage/external-manage/clue-management/invalid-clues/index.vue

@@ -0,0 +1,206 @@
+<template>
+    <div class="table-demo">
+        <bs-table v-bind="tableOptions">
+            <template #searchRight>
+                <div>
+                    <a-button type="primary" @click="openEditDrawer">
+                        <span>项目登记</span>
+                    </a-button>
+                </div>
+                <!-- <a-space>
+            <a-button type="primary" @click="openEditDrawer">
+              <template #icon>
+                <PlusOutlined />
+              </template>
+              <span>新增</span>
+            </a-button>
+          </a-space> -->
+            </template>
+        </bs-table>
+
+        <add-or-edit-drawer ref="addOrEditDrawerRef" />
+    </div>
+</template>
+
+<script setup>
+    import BsTable, { useBsTable } from '/@/components/BsUi/Table/index.js';
+    import { onMounted, ref } from 'vue';
+    import { pick } from 'lodash';
+    import AddOrEditDrawer from '/@/views/table-demo/components/AddOrEditDrawer.vue';
+    import { clientManageApi } from '/@/api/market-manage/index.js';
+
+    const addOrEditDrawerRef = ref(null);
+
+    const {
+        tableOptions,
+        setTablePropsValue: setValue,
+        getTablePropsValue: getValue,
+    } = useBsTable({
+        tableOptions: {
+            gridOptions: {
+                loading: false,
+                columns: [
+                    {
+                        field: 'id',
+                        title: '状态',
+                    },
+                    {
+                        field: 'name',
+                        title: '流水号',
+                    },
+                    {
+                        field: 'name1',
+                        title: '项目名称',
+                    },
+                    {
+                        field: 'name2',
+                        title: '项目ID',
+                    },
+                    {
+                        field: 'name',
+                        title: '项目地址',
+                    },
+                    {
+                        field: 'name',
+                        title: '预计合同金额(万)',
+                    },
+                    {
+                        field: 'name',
+                        title: '项目类型',
+                    },
+                    {
+                        field: 'name',
+                        title: '产品类型',
+                    },
+                    {
+                        field: 'name',
+                        title: '预计开标日期',
+                    },
+                    {
+                        field: 'name',
+                        title: '操作人',
+                    },
+                    {
+                        field: 'name',
+                        title: '操作时间',
+                    },
+                    {
+                        field: 'action',
+                        title: '操作',
+                    },
+
+                ],
+            },
+            searchConfig: {
+                enabled: true,
+                fieldSpan: 4,
+                fields: [
+                    {
+                        field: 'name',
+                        label: '',
+                        component: 'a-input',
+                        componentProps: {
+                            placeholder: '请输入项目名称',
+                        },
+                    },
+                    // {
+                    //   field: 'name',
+                    //   label: '',
+                    //   component: 'a-select',
+                    //   componentProps: {
+                    //     placeholder: '请选择地址',
+                    //   },
+                    // },
+                    // {
+                    //   field: 'name',
+                    //   label: '',
+                    //   component: 'a-select',
+                    //   componentProps: {
+                    //     placeholder: '请选择服务商类型',
+                    //   },
+                    // },
+                ],
+                onSearch() {
+                    fetchTableData();
+                },
+                onReset() {
+                    fetchTableData();
+                },
+            },
+            // pagerConfig: {
+            //   enabled: true,
+            //   pageSize: 10,
+            //   pageNum: 1,
+            //   total: 100,
+            //   onChange: () => {
+            //     fetchTableData();
+            //   },
+            // },
+            toolbarConfig: {
+                onRefresh() {
+                    fetchTableData();
+                },
+            },
+        },
+    });
+
+    const getSearchParams = () => {
+        return getValue('searchConfig.data');
+    };
+    const getPageInfo = () => {
+        return pick(getValue('pagerConfig.pageInfo'), ['pageNum', 'pageSize']);
+    };
+
+    const fetchTableData = () => {
+        setValue('gridOptions.loading', true);
+
+        const params = {
+            ...getSearchParams(),
+            ...getPageInfo(),
+        };
+
+        //
+        // clientManageApi.interventionsList(params).then((res) => {
+        //   console.log('res', res);
+        //   setValue('gridOptions.data', res.data.list);
+        // });
+
+        const TableDate = [
+            {
+                id: '1111111',
+                name: 'John Doe',
+                name1: '1212212',
+                name2: '1313131',
+            },
+            {
+                id: '22222',
+                name: 'John Doe',
+                name1: '1212212',
+                name2: '1313131',
+            },
+            {
+                id: '33333',
+                name: 'John sssssDoe',
+                name1: '12122sss12',
+                name2: '13sss13131',
+            },
+        ];
+        setTimeout(() => {
+            setValue('gridOptions.data', TableDate);
+            setValue('gridOptions.loading', false);
+        }, 1000);
+    };
+
+    onMounted(() => {
+        console.log('表格已加载');
+        fetchTableData();
+    });
+
+    const openEditDrawer = () => {
+        addOrEditDrawerRef.value.showDrawer();
+    };
+</script>
+
+<style scoped lang="scss">
+    .table-demo {}
+</style>