Ver código fonte

新增: 新建广告活动-广告组内容

WanGxC 1 ano atrás
pai
commit
4c148ada5b

+ 13 - 0
src/theme/app.scss

@@ -585,3 +585,16 @@ body,
   border-color: #b3e19d !important;
 }
 
+.no-hover-effect-ban {
+  background-color: #fef0f0;
+  color: #f56c6c;
+  border-color: #fab6b6;
+  margin-top: -3px;
+}
+.no-hover-effect-ban:hover,
+.no-hover-effect-ban:focus,
+.no-hover-effect-ban:active {
+  background-color: #fef0f0 !important;
+  color: #f56c6c !important;
+  border-color: #fab6b6 !important;
+}

+ 0 - 0
src/views/adManage/sd/campaigns/campaignDetail/adGroups/adGroupDetail/negKeyword/api.ts → src/views/adManage/sd/campaigns/campaignDetail/adGroups/adGroupDetail/classification/api.ts


+ 0 - 0
src/views/adManage/sd/campaigns/campaignDetail/adGroups/adGroupDetail/negKeyword/crud.tsx → src/views/adManage/sd/campaigns/campaignDetail/adGroups/adGroupDetail/classification/crud.tsx


+ 0 - 0
src/views/adManage/sd/campaigns/campaignDetail/adGroups/adGroupDetail/negKeyword/index.vue → src/views/adManage/sd/campaigns/campaignDetail/adGroups/adGroupDetail/classification/index.vue


+ 25 - 14
src/views/adManage/sd/campaigns/campaignDetail/adGroups/adGroupDetail/index.vue

@@ -2,23 +2,24 @@
   <div class="asj-container">
     <div class="asj-detail-header">
       <span style="font-size: x-large; font-weight: bold; color: #0f1111;margin: 5px;">
-        <span> {{ adGroupInfo.adGroupName }} </span>
+        <span> {{ adGroupInfo.campaignName }} </span>
       </span>
       <div class="asj-detail-info">
         <span style="color: rgb(177, 177, 177);">状态: </span>
         <span>
           <el-button class="no-hover-effect" type="success" size="small" round plain>{{( dynStatusEnum[adGroupInfo.state] )}}</el-button>
         </span>
-        <span class="head-span">投放类型: </span> <span>{{ dynStatusEnum[adGroupInfo.budgetType] }}</span>
+        <span class="head-span">投放类型:</span> <span>{{ dynStatusEnum[adGroupInfo.tactic] }}</span>
         <!-- <span>默认竞价:{{ profile.currency_symbol + adGroupInfo.defaultBid }}</span> -->
         <span class="head-span">投放日期: </span> <span>{{ adGroupInfo.startDate }} ~ {{ adGroupInfo.endDate ?? '无结束日期' }}</span>
+        <span class="head-span">针对转化率: </span> <span>{{ dynStatusEnum[adGroupInfo.tactic] ? '待加入' : '--' }}</span>
       </div>
     </div>
     <el-tabs type="border-card" class="asj-detail-tabs" v-model="tabActiveName">
-      <el-tab-pane label="广告组" name="ads">
-        <Ads v-if="tabActiveName==='ads'" :adGroupId="route.query.adGroupId"></Ads>
+      <el-tab-pane label="推广商品" name="ads">
+        <PromoteProducts v-if="tabActiveName==='ads'" :adGroupId="route.query.adGroupId"></PromoteProducts>
       </el-tab-pane>
-      <template v-if="route.query.targetingType ==='target'">
+      <template v-if="adGroupInfo.tactic ==='T00030'">
         <el-tab-pane label="商品投放" name="tab2">
           <ManualTarget v-if="tabActiveName === 'tab2'" :adGroupId="route.query.adGroupId">商品投放</ManualTarget>
         </el-tab-pane>
@@ -27,14 +28,14 @@
         <!--</el-tab-pane>-->
       </template>
       <template v-else>
-        <el-tab-pane label="关键词" name="tab2">
-          <Keyword v-if="tabActiveName === 'tab2'" :ad-group-id="route.query.adGroupId">关键词</Keyword>
+        <el-tab-pane label="商品投放" name="tab2">
+          <Target v-if="tabActiveName === 'tab2'" :ad-group-id="route.query.adGroupId">关键词</Target>
         </el-tab-pane>
-        <el-tab-pane label="否定词" name="tab3">
-          <NegKeyword v-if="tabActiveName === 'tab3'" :ad-group-id="route.query.adGroupId">否定词</NegKeyword>
+        <el-tab-pane label="分类" name="tab3">
+          <Classification v-if="tabActiveName === 'tab3'" :ad-group-id="route.query.adGroupId">否定词</Classification>
         </el-tab-pane>
-        <el-tab-pane label="搜索关键词" name="searchTerm">
-          <SearchTerm v-if="tabActiveName === 'searchTerm'" :adGroupId="route.query.adGroupId" />
+        <el-tab-pane label="否定投放" name="searchTerm">
+          <NegTarget v-if="tabActiveName === 'searchTerm'" :adGroupId="route.query.adGroupId" />
         </el-tab-pane>
       </template>
     </el-tabs>
@@ -47,13 +48,13 @@ import {useRoute} from 'vue-router'
 import {GetObj} from './api'
 import {useShopInfo} from '/@/stores/shopInfo'
 import {storeToRefs} from 'pinia'
-import Ads from './ads/index.vue'
+import PromoteProducts from './ads/index.vue'
 import SearchTerm from './searchTerm/index.vue'
-import Keyword from './keyword/index.vue'
+import Target from './target/index.vue'
 import AutoTarget from './autoTarget/index.vue'
 import ManualTarget from './manualTarget/index.vue'
 import NegProduct from './negProduct/index.vue'
-import NegKeyword from './negKeyword/index.vue'
+import Classification from './classification/index.vue'
 import NegTarget from './negTarget/index.vue'
 import {dynStatusEnum, targetTypeEnum} from '/@/views/adManage/utils/enum'
 // import { usePublicData } from '/@/stores/publicData'
@@ -80,4 +81,14 @@ onMounted(async () => {
 :deep(.el-tabs--border-card) {
   border: none;
 }
+/* 表格表头样式 */
+::v-deep(.el-table .el-table__header-wrapper .cell) {
+  border-right: 1px solid rgb(218, 221, 223);
+}
+::v-deep(.el-table__header-wrapper .el-table__header tr th) {
+  border-right: none;
+}
+::v-deep(th.el-table_1_column_1.el-table-fixed-column--left.is-last-column.is-leaf.el-table__cell) {
+  border-right: none;
+}
 </style>

+ 0 - 0
src/views/adManage/sd/campaigns/campaignDetail/adGroups/adGroupDetail/keyword/api.ts → src/views/adManage/sd/campaigns/campaignDetail/adGroups/adGroupDetail/target/api.ts


+ 0 - 0
src/views/adManage/sd/campaigns/campaignDetail/adGroups/adGroupDetail/keyword/crud.tsx → src/views/adManage/sd/campaigns/campaignDetail/adGroups/adGroupDetail/target/crud.tsx


+ 0 - 0
src/views/adManage/sd/campaigns/campaignDetail/adGroups/adGroupDetail/keyword/index.vue → src/views/adManage/sd/campaigns/campaignDetail/adGroups/adGroupDetail/target/index.vue


+ 11 - 2
src/views/adManage/sd/campaigns/campaignDetail/index.vue

@@ -6,9 +6,12 @@
       </span>
       <div class="asj-detail-info">
         <span style="color: rgb(177, 177, 177)">状态: </span>
-        <span>
+        <span v-if="campaignInfo.state==='enabled'">
           <el-button class="no-hover-effect" type="success" round plain size="small" style="margin-top: -3px">{{( dynStatusEnum[campaignInfo.state] )}}</el-button>
         </span><!--({{ campaignInfo.servingStatus }})-->
+        <span v-else>
+          <el-button class="no-hover-effect-ban" type="danger" round plain size="small" style="margin-top: -3px">{{( dynStatusEnum[campaignInfo.state] )}}</el-button>
+        </span>
         <span class="head-span">预算: </span> <span>{{ profile.currency_symbol + campaignInfo.budget }} | {{ dynStatusEnum[campaignInfo.budgetType] }}</span>
         <span class="head-span">投放类型:</span> <span>{{ dynStatusEnum[campaignInfo.tactic] }}</span>
         <span class="head-span">投放日期: </span> <span>{{ campaignInfo.startDate }} ~ {{ campaignInfo.endDate ?? '无结束日期' }}</span>
@@ -46,7 +49,7 @@ import {useShopInfo} from '/@/stores/shopInfo'
 import {storeToRefs} from 'pinia'
 
 import {GetObj} from './api'
-
+const x = 't20'
 const shopInfo = useShopInfo()
 const { profile } = storeToRefs(shopInfo)
 const route = useRoute()
@@ -69,4 +72,10 @@ onMounted(async () => {
 :deep(.el-tabs--border-card) {
   border: none;
 }
+::v-deep(.el-table .el-table__header-wrapper .cell) {
+  border-right: 1px solid rgb(218, 221, 223);
+}
+::v-deep(.el-table__header-wrapper .el-table__header tr th) {
+  border-right: none;
+}
 </style>

+ 402 - 68
src/views/adManage/sp/campaigns/CreateCampaigns/index.vue

@@ -2,6 +2,7 @@
   <div>
     <el-card>
       <div style="padding-left: 5px">
+        <!-- 广告活动 -->
         <div style="font-size: 20px; font-weight: bold">广告活动</div>
         <hr />
         <br />
@@ -18,7 +19,7 @@
             <el-input v-model="ruleForm.name" />
           </el-form-item>
           <el-form-item label="广告组合" prop="adMix">
-            <el-select v-model="ruleForm.adMix" placeholder="Activity zone">
+            <el-select v-model="ruleForm.adMix" placeholder="请选择">
               <el-option label="Zone one" value="shanghai" />
               <el-option label="Zone two" value="beijing" />
             </el-select>
@@ -30,7 +31,7 @@
             <el-date-picker v-model="ruleForm.date2" label="结束日期" placeholder="结束日期" style="width: 100%" />
           </el-form-item>
           <el-form-item prop="budget" label="每日预算" style="width: 350px">
-            <el-input v-model="ruleForm.budget" />
+            <el-input v-model="ruleForm.budget" maxlength="7" oninput="value=value.indexOf('.') > -1?value.slice(0, value.indexOf('.') + 3):value" />
           </el-form-item>
           <el-form-item label="投放类型" prop="type" class="column-item">
             <el-radio-group v-model="ruleForm.type" @click="changeType">
@@ -66,8 +67,29 @@
               </el-radio>
             </el-radio-group>
           </el-form-item>
+          <el-form-item label="按展示位置调整出价" prop="placeBid">
+            <p style="color: #8e9196">除了出价策略外,您还可以将出价提高多达900%</p>
+            <div class="gap-items">
+              <div class="gap-item">搜索结果顶部(首页)</div>
+              <el-input v-model="ruleForm.placeBid" class="gap-item">
+                <template #append>%</template>
+              </el-input>
+            </div>
+            <div class="gap-items">
+              <div class="gap-item">商品首页</div>
+              <el-input v-model="ruleForm.firstPage" class="gap-item">
+                <template #append>%</template>
+              </el-input>
+            </div>
+            <div class="gap-items">
+              <div class="gap-item">搜索结果的其余位置</div>
+              <el-input v-model="ruleForm.other" class="gap-item">
+                <template #append>%</template>
+              </el-input>
+            </div>
+          </el-form-item>
 
-          <el-form
+          <!-- <el-form
             :label-position="labelPosition"
             ref="ruleFormRef2"
             :model="ruleForm2"
@@ -97,9 +119,131 @@
                 </el-input>
               </div>
             </el-form-item>
-          </el-form>
+          </el-form> -->
+
+          <!-- 广告组 -->
+          <div style="font-size: 20px; font-weight: bold; margin-top: 30px">广告组</div>
+          <hr />
+          <el-form-item label="广告组名称" prop="adGroupName" style="width: 350px; margin-top: 20px">
+            <el-input v-model="ruleForm.adGroupName" />
+          </el-form-item>
+          <el-form-item label="商品" prop="commodity" style="width: 100%; margin-top: 20px">
+            <div style="width: 100%; height: 620px; display: flex; border: 1px solid #c2c7cf; border-radius: 6px">
+              <div style="width: 50%; border-right: 1px solid #c2c7cf">
+                <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
+                  <el-tab-pane label="搜索" name="first">
+                    <div style="margin-bottom: 10px">
+                      <el-input v-model="input3" placeholder="Please input" class="input-with-select">
+                        <template #prepend>
+                          <el-select v-model="select" style="width: 100px">
+                            <el-option label="名称" value="name" />
+                            <el-option label="ASIN" value="asin" />
+                            <el-option label="SKU" value="sku" />
+                          </el-select>
+                        </template>
+                        <template #append>
+                          <el-select v-model="select2" style="width: 100px">
+                            <el-option label="最新优先" value="latest" />
+                            <el-option label="最早优先" value="earliest" />
+                            <el-option label="优选广告" value="optimal" />
+                          </el-select>
+                        </template>
+                      </el-input>
+                    </div>
+                    <el-table height="490" style="width: 100%"
+                      v-loading="loading"
+                      :data="fullTableData"
+                      :header-cell-style="headerCellStyle"
+                      @selection-change="handleSelectionChange">
+                      <el-table-column type="selection" width="50" />
+                      <el-table-column prop="asin" label="ASIN" width="538">
+                        <template #default="scope">
+                          <div>
+                              <!-- <el-image :preview-src-list="srcList"/> -->
+                              <el-tooltip class="box-item" effect="dark" :content=scope.row.title placement="top">
+                                <div class="single-line">{{ scope.row.title }}</div>
+                              </el-tooltip>
+                              <div>{{ scope.row.asin }}</div>
+                          </div>
+                        </template>
+                      </el-table-column>
+                      <el-table-column  prop="name" label="Name" width="120" align="right">
+                        <template #header>
+                          <el-button type="primary" size="normal" link @click="handleAdd">添加</el-button>
+                        </template>
+                      </el-table-column>
+                    </el-table>
+                    <el-pagination
+                      @current-change="handleCurrentChange"
+                      @size-change="handleSizeChange"
+                      :current-page="currentPage"
+                      :page-size="pageSize"
+                      :total="totalItems"
+                      layout="prev, pager, next"
+                    />
+                  </el-tab-pane>
+                  <el-tab-pane label="输入" name="second">
+                    <el-input
+                      v-model="textarea"
+                      :rows="15"
+                      type="textarea"
+                      placeholder="请输入ASIN,多个ASIN使用逗号、空格或换行符分隔。"
+                      maxlength="11000" />
+                    <div style="display: flex; flex-direction: row-reverse; margin-top: 10px">
+                      <el-button v-for="button in buttons" :key="button.text" :type="button.type" link>{{ button.text }}</el-button>
+                    </div>
+                    <el-row :gutter="12" style="margin-top: 50px">
+                      <el-col :span="12">
+                        <el-card class="card-box" shadow="never" style="border: none; background-color: #e3f0de; height: 50px">
+                          <div style="line-height: 15px">Always</div>
+                          <div style="line-height: 15px">
+                            <el-icon style="color: #8fc47d; font-size: 25px"><SuccessFilled /></el-icon>
+                          </div>
+                        </el-card>
+                      </el-col>
+                      <el-col :span="12">
+                        <el-card class="card-box" shadow="never" style="border: none; background-color: #fbe6e3; height: 50px">
+                          <div style="line-height: 15px">Never</div>
+                          <div style="line-height: 15px">
+                            <el-icon style="color: #e3918d; font-size: 25px"><CircleCloseFilled /></el-icon>
+                          </div>
+                        </el-card>
+                      </el-col>
+                    </el-row>
+                  </el-tab-pane>
+                </el-tabs>
+              </div>
+              <div style="width: 50%">
+                <el-card class="box-card" shadow="never">
+                  <template #header>
+                    <div class="card-header">
+                      <span>Card name</span>
+                      <el-button class="button" text>全部删除</el-button>
+                    </div>
+                  </template>
+                  <!-- <div v-for="o in 4" :key="o" class="text item">{{ 'List item ' + o }}</div> -->
+                  <div class="card-body"></div>
+                  <!-- <template #footer>Footer content</template> -->
+                </el-card>
+                <div style="padding: 0 10px 0 10px; margin-top: -12px;">
+                  <el-table :data="fullTableData" height="420" style="width: 100%" :header-cell-style="headerCellStyle">
+                    <el-table-column type="selection" width="50" />
+                      <el-table-column prop="date" label="Date" width="538" />
+                      <el-table-column  prop="name" label="Name" width="120" align="right">
+                        <template #header>
+                          <el-button type="primary" size="normal" link>删除</el-button>
+                        </template>
+                      </el-table-column>
+
+                  </el-table>
+                </div>
+              </div>
+            </div>
+          </el-form-item>
+
+          <br />
           <el-form-item>
-            <el-button type="primary" @click="submitForm">Create</el-button>
+            <el-button type="primary" @click="submitForm(ruleFormRef)">Create</el-button>
             <el-button @click="resetForm(ruleFormRef)">Reset</el-button>
           </el-form-item>
         </el-form>
@@ -109,11 +253,98 @@
 </template>
 
 <script lang="ts" setup>
-import { onMounted, reactive, ref } from 'vue'
+import { onMounted, reactive, ref, computed } from 'vue'
 import { useRoute } from 'vue-router'
-import type { FormInstance, FormRules } from 'element-plus'
+import type { FormInstance, FormRules, TabsPaneContext } from 'element-plus'
+import { Search } from '@element-plus/icons-vue'
+import { useShopInfo } from '/@/stores/shopInfo'
+import { usePublicData } from '/@/stores/publicData'
+import { storeToRefs } from 'pinia'
+import { useRouter } from 'vue-router'
+import axios from 'axios'
+import { request } from '/@/utils/service'
 
+
+onMounted(() => {
+  setTableData()
+  // const myTest = route.query
+  // console.log('myTest', myTest)
+})
+
+
+const router = useRouter()
 const route = useRoute()
+const shopInfo = useShopInfo()
+const publicData = usePublicData()
+const { dateRange } = storeToRefs(publicData)
+const { profile } = storeToRefs(shopInfo)
+const queryParams = ref({
+  profileId: profile.value.profile_id,
+  dateRange,
+})
+const loading = ref(true)
+
+let respData
+function setTableData() {
+  return request({
+    url: "/api/sellers/sellerlistings/",
+    method: 'GET',
+    params: {profile_id: profile.value.profile_id, page: currentPage.value, limit: pageSize.value}
+  }).then(resp => {
+    fullTableData.value = resp.data
+    respData = resp.data
+    totalItems.value = resp.total
+    currentPage.value = resp.page
+    loading.value = false
+    console.log('respData', respData)
+  })
+}
+
+const fullTableData = ref([])  // 表格数据
+const currentPage = ref()  // 当前页
+const pageSize = ref(20)  // 每页显示条目数
+const totalItems = ref()  // 数据总量
+
+// 计算当前应显示的表格数据
+// const pagedTableData = computed(() => {
+//   const start = (currentPage.value - 1) * pageSize.value
+//   const end = start + pageSize.value
+//   return fullTableData.value.slice(start, end)
+// })
+
+// 处理分页器当前页变化
+function handleCurrentChange(newPage) {
+  loading.value = true
+  currentPage.value = newPage
+  setTableData()
+}
+
+// 处理分页器每页显示条目数变化
+function handleSizeChange(newSize) {
+  pageSize.value = newSize;
+  currentPage.value = 1  // 重置到第一页
+}
+
+let selections
+function handleSelectionChange(selection) {
+  console.log('selection', selection)
+  selections = selection
+}
+
+// 处理添加按钮点击事件
+function handleAdd() {
+  console.log('selections', selections)
+}
+
+// 修改表头样式
+const headerCellStyle = (args) => {
+  // console.log('args', args)
+  if (args.rowIndex === 0) {
+    return {
+      backgroundColor: 'rgba(245, 245, 245, 0.9)',
+    }
+  }
+}
 
 // const size = ref('default')
 // const labelPosition = ref('top')
@@ -127,11 +358,10 @@ interface RuleForm {
   delivery: boolean
   type: string
   bidStrategy: string
-}
-interface RuleForm2 {
   placeBid: string
   firstPage: string
   other: string
+  adGroupName: string
 }
 
 const formSize = ref('default')
@@ -147,59 +377,39 @@ const ruleForm = reactive<RuleForm>({
   delivery: false,
   type: 'auto',
   bidStrategy: 'dynamicBid_Low',
+  placeBid: '',
+  firstPage: '',
+  other: '',
+  adGroupName: '',
 })
-const rules = reactive<FormRules<RuleForm>>({
-  name: [
-    { required: true, message: 'Please input Activity name', trigger: 'blur' },
-    { min: 3, max: 5, message: 'Length should be 3 to 5', trigger: 'blur' },
-  ],
+const rules = reactive<FormRules<RuleForm>> ({
+  name: [{ required: true, message: 'Please input Activity name', trigger: 'blur' }],
   adMix: [{ required: false, message: 'Please select Activity zone', trigger: 'change' }],
   count: [{ required: true, message: 'Please select Activity count', trigger: 'change' }],
   date1: [{ required: true, type: 'date', message: 'Please pick a date', trigger: 'change' }],
   date2: [{ required: false, type: 'date', message: 'Please pick a time', trigger: 'change' }],
-  budget: [{ required: true, message: '请输入预算', trigger: 'blur' }],
-  type: [{ required: false, message: 'Please select at least one activity type', trigger: 'change' }],
+  budget: [
+    { required: true, message: '请输入预算', trigger: 'blur' },
+    { pattern: /^(?:[1-9]\d{0,5}|1000000)(?:\.\d{1,2})?$/, message: '预算必须是1到1000000之间的数字,小数点后最多两位', trigger: 'blur' },
+  ],
+  type: [{ required: false, trigger: 'change' }],
   bidStrategy: [{ required: true, message: 'Please select activity resource', trigger: 'change' }],
-})
-
-const ruleFormRef2 = ref<FormInstance>()
-const ruleForm2 = reactive<RuleForm2>({
-  placeBid: '',
-  firstPage: '',
-  other: '',
-})
-const rules2 = reactive<FormRules<RuleForm2>>({
   placeBid: [{ required: false, pattern: /^[0-9]{1,3}$/, message: '必须是0~900之间的整数百分比', trigger: 'change' }],
   firstPage: [{ required: false, pattern: /^[0-9]{1,3}$/, message: '必须是0~900之间的整数百分比', trigger: 'change' }],
   other: [{ required: false, pattern: /^[0-9]{1,3}$/, message: '必须是0~900之间的整数百分比', trigger: 'change' }],
+  adGroupName: [{ required: true, message: 'Please input Activity name', trigger: 'blur' }],
 })
 
-async function submitForm() {
-  let isValid = true
-
-  // 校验第一个表单
-  if (ruleFormRef.value) {
-    await ruleFormRef.value.validate((valid) => {
-      if (!valid) {
-        console.log('Error in form 1')
-        isValid = false
-      }
-    })
-  }
-  // 校验第二个表单
-  if (isValid && ruleFormRef2.value) {
-    await ruleFormRef2.value.validate((valid) => {
-      if (!valid) {
-        console.log('Error in form 2')
-        isValid = false
-      }
-    })
-  }
-  // 如果两个表单都通过校验,则继续后续操作
-  if (isValid) {
-    console.log('Both forms are valid. Proceed with the submission.')
-    // 这里可以放置提交表单的逻辑
-  }
+async function submitForm(formEl: FormInstance | undefined) {
+  if (!formEl) return
+  await formEl.validate((valid, fields) => {
+    if (valid) {
+      console.log('submit!')
+      console.log('budget', ruleForm.budget)
+    } else {
+      console.log('error submit!', fields)
+    }
+  })
 }
 
 function resetForm(formEl: FormInstance | undefined) {
@@ -207,31 +417,107 @@ function resetForm(formEl: FormInstance | undefined) {
   formEl.resetFields()
 }
 
-const options = Array.from({ length: 10000 }).map((_, idx) => ({
-  value: `${idx + 1}`,
-  label: `${idx + 1}`,
-}))
+// const options = Array.from({ length: 10000 }).map((_, idx) => ({
+//   value: `${idx + 1}`,
+//   label: `${idx + 1}`,
+// }))
 
 function changeType() {
   console.log(ruleForm.type)
 }
 
-onMounted(() => {
-  const myTest = route.query
-  console.log('myTest', myTest)
-})
+// 商品模块
+const activeName = ref('first')
+
+const handleClick = (tab: TabsPaneContext, event: Event) => {
+  console.log(tab, event)
+}
+
+const input3 = ref('')
+const select = ref('name')
+const select2 = ref('latest')
+const textarea = ref('')
+const buttons = [{ type: 'primary', text: '添加' }] as const
+
+// const pagedTableData = [
+//   {
+//     date: '2016-05-03',
+//     name: 'Tom',
+//     address: 'No. 189, Grove St, Los Angeles',
+//   },
+//   {
+//     date: '2016-05-02',
+//     name: 'Tom',
+//     address: 'No. 189, Grove St, Los Angeles',
+//   },
+//   {
+//     date: '2016-05-04',
+//     name: 'Tom',
+//     address: 'No. 189, Grove St, Los Angeles',
+//   },
+//   {
+//     date: '2016-05-01',
+//     name: 'Tom',
+//     address: 'No. 189, Grove St, Los Angeles',
+//   },
+//   {
+//     date: '2016-05-08',
+//     name: 'Tom',
+//     address: 'No. 189, Grove St, Los Angeles',
+//   },
+//   {
+//     date: '2016-05-06',
+//     name: 'Tom',
+//     address: 'No. 189, Grove St, Los Angeles',
+//   },
+//   {
+//     date: '2016-05-07',
+//     name: 'Tom',
+//     address: 'No. 189, Grove St, Los Angeles',
+//   },
+//   {
+//     date: '2016-05-07',
+//     name: 'Tom',
+//     address: 'No. 189, Grove St, Los Angeles',
+//   },
+//   {
+//     date: '2016-05-07',
+//     name: 'Tom',
+//     address: 'No. 189, Grove St, Los Angeles',
+//   },
+//   {
+//     date: '2016-05-07',
+//     name: 'Tom',
+//     address: 'No. 189, Grove St, Los Angeles',
+//   },
+//   {
+//     date: '2016-05-07',
+//     name: 'Tom',
+//     address: 'No. 189, Grove St, Los Angeles',
+//   },
+//   {
+//     date: '2016-05-07',
+//     name: 'Tom',
+//     address: 'No. 189, Grove St, Los Angeles',
+//   },
+//   {
+//     date: '2016-05-07',
+//     name: 'Tom',
+//     address: 'No. 189, Grove St, Los Angeles',
+//   },
+// ]
+
+// 分页器相关状态
+
+
+// 后端获取的完整数据
 
 defineOptions({
   name: 'SpCreateCampaigns',
 })
-
-// ::v-deep(.column-margin-bottom span.el-radio__input.is-checked) {
-//   margin-top: -20px;
-//   margin-left: -15px;
-// }
 </script>
 
-<style scoped>
+<style lang="scss" scoped>
 ::v-deep(.el-form--default.el-form--label-top .el-form-item .el-form-item__label) {
   font-weight: 500;
 }
@@ -252,17 +538,14 @@ defineOptions({
   color: #666;
   margin-top: -10px;
 }
-
 .column-margin-bottom label.el-radio.is-bordered {
   margin-bottom: 10px;
   padding: 35px;
 }
-
 ::v-deep(.column-margin-bottom label.el-radio.is-bordered span.el-radio__inner) {
   margin-top: -18px;
   margin-left: -15px;
 }
-
 .gap-items {
   display: flex;
   justify-content: flex-start;
@@ -274,4 +557,55 @@ defineOptions({
   margin-left: 30px;
   color: #0b0d0d;
 }
+
+.demo-tabs > .el-tabs__content {
+  padding: 52px;
+  color: #6b778c;
+  font-size: 32px;
+  font-weight: 600;
+}
+/* 广告组商品Tab栏 */
+::v-deep(.el-tabs__nav-scroll) {
+  overflow: hidden;
+  margin-left: 20px;
+}
+::v-deep(.el-tabs__nav-wrap::after) {
+  height: 2px !important;
+}
+::v-deep(.el-table__inner-wrapper::before) {
+  background-color: white;
+}
+// 表格内容边距
+div {
+  & #pane-first,
+  & #pane-second {
+    margin: 10px;
+  }
+}
+// 输入底部样式
+::v-deep(.card-box .el-card__body) {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  padding: 12px;
+}
+.card-header {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+.box-card {
+  width: 100%;
+  // margin: 10px 0 10px 10px;
+  margin-right: 10px;
+  border: none;
+}
+
+.single-line {
+  overflow: hidden;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+  display: block;  // 确保这是块级元素以应用省略号
+}
+
 </style>

+ 1 - 1
tsconfig.json

@@ -7,7 +7,7 @@
 		"target": "esnext" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */,
 		"module": "esnext" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */,
 		"lib": ["esnext", "dom", "dom.iterable", "scripthost"] /* Specify library files to be included in the compilation. */,
-		// "allowJs": true,                       /* Allow javascript files to be compiled. */
+		"allowJs": true,                       /* Allow javascript files to be compiled. */
 		// "checkJs": true,                       /* Report errors in .js files. */
 		"jsx": "preserve" /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */,
 		// "declaration": true /* Generates corresponding '.d.ts' file. */,