yuwenjun1997 преди 2 години
родител
ревизия
f9e6ac2153

+ 1 - 13
src/views/normal/club/cate/index.vue

@@ -44,19 +44,7 @@
 
       <el-table-column label="审核状态" width="220px" align="center">
         <template slot-scope="{ row }">
-          <el-tag v-if="row.auditStatus === 2" size="small" type="warning">待审核</el-tag>
-          <el-tag v-if="row.auditStatus === 1" size="small" type="success">审核通过</el-tag>
-          <!-- 未通过原因展示 -->
-          <template v-if="row.auditStatus === 0">
-            <!-- <span class="status danger">审核未通过&nbsp;</span> -->
-            <el-popover placement="top-start" title="审核说明" width="400" trigger="hover" :content="row.invalidReason">
-              <el-tag slot="reference" size="small" type="danger" class="reason">
-                <span>审核未通过</span>
-                <span class="el-icon-question status danger" />
-              </el-tag>
-            </el-popover>
-            <!-- 未通过原因展示END -->
-          </template>
+          <audit-status :status="row.auditStatus" :reason="row.invalidReason" />
         </template>
       </el-table-column>
 

+ 1 - 13
src/views/normal/club/device/index.vue

@@ -52,19 +52,7 @@
 
       <el-table-column label="审核状态" width="120px" align="center">
         <template slot-scope="{ row }">
-          <el-tag v-if="row.auditStatus === 2" size="small" type="warning">待审核</el-tag>
-          <el-tag v-if="row.auditStatus === 1" size="small" type="success">审核通过</el-tag>
-          <!-- 未通过原因展示 -->
-          <template v-if="row.auditStatus === 0">
-            <!-- <span class="status danger">审核未通过&nbsp;</span> -->
-            <el-popover placement="top-start" title="审核说明" width="400" trigger="hover" :content="row.invalidReason">
-              <el-tag slot="reference" size="small" type="danger" class="reason">
-                <span>审核未通过</span>
-                <span class="el-icon-question status danger " />
-              </el-tag>
-            </el-popover>
-            <!-- 未通过原因展示END -->
-          </template>
+          <audit-status :status="row.auditStatus" :reason="row.invalidReason" />
         </template>
       </el-table-column>
 

+ 1 - 13
src/views/normal/club/index.vue

@@ -55,19 +55,7 @@
 
       <el-table-column label="审核状态" width="120px" align="center">
         <template slot-scope="{ row }">
-          <el-tag v-if="row.auditStatus === 2" size="small" type="warning">待审核</el-tag>
-          <el-tag v-if="row.auditStatus === 1" size="small" type="success">审核通过</el-tag>
-          <!-- 未通过原因展示 -->
-          <template v-if="row.auditStatus === 0">
-            <!-- <span class="status danger">审核未通过&nbsp;</span> -->
-            <el-popover placement="top-start" title="审核说明" width="400" trigger="hover" :content="row.invalidReason">
-              <el-tag slot="reference" size="small" type="danger" class="reason">
-                <span>审核未通过</span>
-                <span class="el-icon-question status danger" />
-              </el-tag>
-            </el-popover>
-            <!-- 未通过原因展示END -->
-          </template>
+          <audit-status :status="row.auditStatus" :reason="row.invalidReason" />
         </template>
       </el-table-column>
 

+ 0 - 200
src/views/normal/club/user/index-temp.vue

@@ -1,200 +0,0 @@
-<template>
-  <div class="app-container">
-    <!-- 搜索区域 -->
-    <div class="filter-container">
-      <div class="filter-control">
-        <span>手机号:</span>
-        <el-input v-model="listQuery.mobile" placeholder="手机号" @keyup.enter.native="getList" />
-      </div>
-      <div class="filter-control">
-        <span>状态:</span>
-        <el-select v-model="listQuery.status" placeholder="邀请码状态" clearable @change="getList">
-          <el-option label="全部" value="" />
-          <el-option label="已绑定" :value="1" />
-          <el-option label="未绑定" :value="0" />
-          <el-option label="已过期" :value="2" />
-        </el-select>
-      </div>
-      <div class="filter-control">
-        <permission-button type="primary" @click="getList">查询</permission-button>
-        <permission-button type="primary" @click="handleMakeGenerate">生成邀请码</permission-button>
-      </div>
-    </div>
-    <!-- 搜索区域END -->
-    <!-- 表格区域 -->
-    <el-table
-      v-loading="listLoading"
-      :data="list"
-      style="width: 100%"
-      border
-      fit
-      highlight-current-row
-      cell-class-name="table-cell"
-      header-row-class-name="tableHeader"
-    >
-      <el-table-column label="序号" :index="indexMethod" type="index" width="80px" align="center" />
-      <el-table-column label="邀请码" prop="invitationCode" width="100px" align="center" />
-      <el-table-column label="状态" width="100px" align="center">
-        <template slot-scope="{ row }">
-          <el-tag v-if="row.status === 0" size="small" type="warning">未绑定</el-tag>
-          <el-tag v-if="row.status === 1" size="small" type="success">已绑定</el-tag>
-          <el-tag v-if="row.status === 2" size="small" type="danger">已过期</el-tag>
-        </template>
-      </el-table-column>
-      <el-table-column label="添加时间" width="160px" align="center">
-        <template slot-scope="{ row }">
-          <span>{{ row.addTime | formatTime }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="微信昵称" align="center">
-        <template slot-scope="{ row }">
-          <span v-if="row.nickName">{{ row.nickName }}</span>
-          <span v-else>—</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="手机号" width="140" align="center">
-        <template slot-scope="{ row }">
-          <span v-if="row.mobile">{{ row.mobile }}</span>
-          <span v-else>—</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="openID" width="280" align="center">
-        <template slot-scope="{ row }">
-          <span v-if="row.openId">{{ row.openId }}</span>
-          <span v-else>—</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="绑定时间" width="160px" align="center">
-        <template slot-scope="{ row }">
-          <span v-if="row.bindTime">{{ row.bindTime | formatTime }}</span>
-          <span v-else>—</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="操作" width="200px" align="center">
-        <template slot-scope="{ row }">
-          <permission-button
-            v-if="row.status === 1"
-            type="danger"
-            size="mini"
-            style="margin-right: 12px"
-            @click="handleUnbindGenerate(row)"
-          >解绑邀请码</permission-button>
-          <permission-button
-            v-else
-            type="primary"
-            size="mini"
-            style="margin-right: 12px"
-            @click="handleUpdateGenerate(row)"
-          >更新邀请码</permission-button>
-        </template>
-      </el-table-column>
-    </el-table>
-    <!-- 表格区域END -->
-    <pagination
-      :total="total"
-      :page.sync="listQuery.pageNum"
-      :limit.sync="listQuery.pageSize"
-      @pagination="getList(listQuery)"
-    />
-  </div>
-</template>
-
-<script>
-import PermissionButton from '@/views/components/PermissionButton'
-import { mapGetters } from 'vuex'
-import { getAuthUserList, makeGenerate, unbindGenerate, updateGenerate } from '@/api/auth'
-export default {
-  components: { PermissionButton },
-  data() {
-    return {
-      total: 0,
-      authId: '', // 机构id
-      listLoading: false,
-      listQuery: {
-        authId: '', // 机构id
-        mobile: '', // 手机号
-        status: '', // 邀请码状态
-        pageNum: 0, // 页码
-        pageSize: 10 // 分页大小
-      },
-      list: [],
-      srcList: []
-    }
-  },
-  computed: {
-    ...mapGetters(['authUserId'])
-  },
-  created() {
-    this.authId = this.$route.query.id
-    this.getList()
-  },
-  methods: {
-    // 获取列表数据
-    getList() {
-      this.listLoading = true
-      this.listQuery.authId = this.authId
-      getAuthUserList(this.listQuery)
-        .then((res) => {
-          if (res.code !== 0) return
-          this.list = res.data.list
-          this.total = res.data.total
-          console.log(res)
-        })
-        .finally(() => {
-          this.listLoading = false
-        })
-    },
-    // 生成邀请码
-    handleMakeGenerate() {
-      makeGenerate({ authId: this.authId }).then((res) => {
-        console.log(res)
-        if (res.code !== 0) return
-        this.$message({
-          type: 'success',
-          message: res.data,
-          duration: 500
-        })
-        this.getList()
-      })
-    },
-    // 更新邀请码
-    handleUpdateGenerate(row) {
-      updateGenerate({ clubUserId: row.clubUserId }).then((res) => {
-        if (res.code !== 0) return
-        console.log(res)
-        this.$message({
-          type: 'success',
-          message: res.data,
-          duration: 500
-        })
-        this.getList()
-      })
-    },
-    // 解绑邀请码
-    handleUnbindGenerate(row) {
-      unbindGenerate({ clubUserId: row.clubUserId }).then((res) => {
-        if (res.code !== 0) return
-        console.log(res)
-        this.$message({
-          type: 'success',
-          message: res.data,
-          duration: 500
-        })
-        this.getList()
-      })
-    },
-    indexMethod(index) {
-      return index + this.listQuery.pageSize * (this.listQuery.pageNum - 1) + 1
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.el-table .cell {
-  overflow: visible;
-}
-.el-badge {
-  margin: 0 6px;
-}
-</style>

+ 0 - 259
src/views/normal/club/user/index.vue

@@ -1,259 +0,0 @@
-<template>
-  <div class="app-container">
-    <!-- 搜索区域 -->
-    <div class="filter-container">
-      <div class="filter-control">
-        <span>姓名:</span>
-        <el-input v-model="listQuery.name" placeholder="姓名" @keyup.enter.native="getList" />
-      </div>
-      <div class="filter-control">
-        <span>手机号:</span>
-        <el-input v-model="listQuery.mobile" placeholder="手机号" @keyup.enter.native="getList" />
-      </div>
-      <div class="filter-control">
-        <permission-button type="primary" @click="getList">查询</permission-button>
-        <permission-button type="primary" @click="handleCreate">添加用户</permission-button>
-      </div>
-    </div>
-    <!-- 搜索区域END -->
-    <!-- 表格区域 -->
-    <el-table
-      v-loading="listLoading"
-      :data="list"
-      style="width: 100%"
-      border
-      fit
-      highlight-current-row
-      cell-class-name="table-cell"
-      header-row-class-name="tableHeader"
-    >
-      <el-table-column label="序号" :index="indexMethod" type="index" width="80px" align="center" />
-      <el-table-column label="姓名" prop="name" align="center" />
-      <el-table-column label="手机号" width="140" align="center">
-        <template slot-scope="{ row }">
-          <span v-if="row.mobile">{{ row.mobile }}</span>
-          <span v-else>—</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="添加时间" width="160px" align="center">
-        <template slot-scope="{ row }">
-          <span>{{ row.addTime | formatTime }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="微信昵称" align="center">
-        <template slot-scope="{ row }">
-          <span v-if="row.nickName">{{ row.nickName }}</span>
-          <span v-else>—</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="openID" width="280" align="center">
-        <template slot-scope="{ row }">
-          <span v-if="row.openId">{{ row.openId }}</span>
-          <span v-else>—</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="操作" width="200px" align="center">
-        <template slot-scope="{ row }">
-          <permission-button
-            type="danger"
-            size="mini"
-            style="margin-right: 5px"
-            @click="handleEdit(row)"
-          >编辑</permission-button>
-          <permission-button
-            type="primary"
-            size="mini"
-            style="margin-right: 5px"
-            @click="handleRemove(row)"
-          >删除</permission-button>
-        </template>
-      </el-table-column>
-    </el-table>
-    <!-- 表格区域END -->
-    <pagination
-      :total="total"
-      :page.sync="listQuery.pageNum"
-      :limit.sync="listQuery.pageSize"
-      @pagination="getList(listQuery)"
-    />
-
-    <el-dialog title="添加用户" width="30%" :visible.sync="dialogVisible" @close="onDialogClose">
-      <el-form ref="form" label-width="80px" :model="formData" :rules="rules">
-        <el-form-item label="姓名:" prop="name">
-          <el-input v-model="formData.name" placeholder="请输入姓名" />
-        </el-form-item>
-        <el-form-item label="手机号:" prop="mobile">
-          <el-input v-model="formData.mobile" placeholder="请输入手机号" maxlength="11" show-word-limit />
-        </el-form-item>
-      </el-form>
-      <span slot="footer" class="dialog-footer">
-        <el-button @click="dialogVisible = false">取 消</el-button>
-        <el-button type="primary" @click="onSave">确 定</el-button>
-      </span>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import PermissionButton from '@/views/components/PermissionButton'
-import { mapGetters } from 'vuex'
-import { createClubUser, getAuthUserList, removeClubUser } from '@/api/auth'
-import { isMobile } from '@/utils/validate'
-
-const resetFormData = () => ({
-  clubUserId: '',
-  authId: '',
-  name: '',
-  mobile: ''
-})
-
-export default {
-  components: { PermissionButton },
-  data() {
-    const validateMobile = (rule, value, callback) => {
-      console.log(value)
-      if (isMobile(value)) {
-        callback()
-      } else {
-        callback(new Error('手机号格式不正确'))
-      }
-    }
-
-    return {
-      total: 0,
-      authId: '', // 机构id
-      listLoading: false,
-      listQuery: {
-        authId: '', // 机构id
-        name: '', // 用户名
-        mobile: '', // 手机号
-        pageNum: 0, // 页码
-        pageSize: 10 // 分页大小
-      },
-      list: [],
-      srcList: [],
-      dialogVisible: false,
-      formData: resetFormData(),
-      rules: {
-        name: [{ required: true, message: '请输入用户姓名', trigger: ['blur'] }],
-        mobile: [
-          { required: true, message: '请输入手机号', trigger: ['blur'] },
-          { validator: validateMobile, message: '手机号格式不正确', trigger: ['blur'] }
-        ]
-      }
-    }
-  },
-  computed: {
-    ...mapGetters(['authUserId', 'authUserId'])
-  },
-  created() {
-    this.authId = parseInt(this.$route.query.id)
-    this.getList()
-  },
-  methods: {
-    // 更新列表
-    getList() {
-      this.listQuery.pageNum = 1
-      this.fetchUserList()
-    },
-
-    // 获取列表数据
-    async fetchUserList() {
-      this.listLoading = true
-      this.listQuery.authId = this.authId
-      try {
-        const res = await getAuthUserList(this.listQuery)
-        this.list = res.data.list
-        this.total = res.data.total
-      } catch (error) {
-        console.log(error)
-      } finally {
-        this.listLoading = false
-      }
-    },
-
-    // 创建用户
-    handleCreate() {
-      this.dialogVisible = true
-    },
-    // 修改用户
-    handleEdit(row) {
-      this.formData.clubUserId = row.clubUserId
-      this.formData.authId = row.authId
-      this.formData.name = row.name
-      this.formData.mobile = row.mobile
-      this.dialogVisible = true
-    },
-
-    // 保存用户信息
-    async onSave() {
-      let valide = false
-      try {
-        valide = await this.$refs.form.validate()
-      } catch (error) {
-        console.log(error)
-      }
-      if (!valide) return
-
-      this.formData.authId = this.authId
-      try {
-        await createClubUser(this.formData)
-        this.$message.success('添加用户成功')
-        this.fetchUserList()
-        this.dialogVisible = false
-      } catch (error) {
-        console.log(error)
-      }
-    },
-    // 删除用户
-    async handleRemove(row) {
-      let confirmType = ''
-      try {
-        confirmType = await this.$confirm('确认删除改用户?', '提示', {
-          confirmButtonText: '确认',
-          cancelButtonText: '取消',
-          type: 'warning'
-        })
-      } catch (error) {
-        console.log(error)
-      }
-
-      if (!confirmType) return
-
-      try {
-        await removeClubUser({ clubUserId: row.clubUserId })
-        this.$message.success('删除用户成功')
-        this.fetchUserList()
-      } catch (error) {
-        console.log(error)
-      }
-    },
-
-    onDialogClose() {
-      this.$refs.form.resetFields()
-      this.formData = resetFormData()
-    },
-
-    indexMethod(index) {
-      return index + this.listQuery.pageSize * (this.listQuery.pageNum - 1) + 1
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.app-container {
-  ::v-deep {
-    .el-dialog__body {
-      padding-bottom: 0;
-    }
-  }
-}
-
-.el-table .cell {
-  overflow: visible;
-}
-.el-badge {
-  margin: 0 6px;
-}
-</style>

+ 1 - 13
src/views/normal/material/article/index.vue

@@ -52,19 +52,7 @@
       </el-table-column>
       <el-table-column label="审核状态" width="120px" align="center">
         <template slot-scope="{ row }">
-          <el-tag v-if="row.auditStatus === 2" size="small" type="warning">待审核</el-tag>
-          <el-tag v-if="row.auditStatus === 1" size="small" type="success">审核通过</el-tag>
-          <!-- 未通过原因展示 -->
-          <template v-if="row.auditStatus === 0">
-            <!-- <span class="status danger">审核未通过&nbsp;</span> -->
-            <el-popover placement="top-start" title="审核说明" width="400" trigger="hover" :content="row.invalidReason">
-              <el-tag slot="reference" size="small" type="danger" class="reason">
-                <span>审核未通过</span>
-                <span class="el-icon-question status danger" />
-              </el-tag>
-            </el-popover>
-            <!-- 未通过原因展示END -->
-          </template>
+          <audit-status :status="row.auditStatus" :reason="row.invalidReason" />
         </template>
       </el-table-column>
       <el-table-column label="上线状态" width="160px" align="center">

+ 1 - 13
src/views/normal/material/file/index.vue

@@ -45,19 +45,7 @@
       <el-table-column label="文件标题" prop="fileTitle" align="center" />
       <el-table-column label="审核状态" width="120px" align="center">
         <template slot-scope="{ row }">
-          <el-tag v-if="row.auditStatus === 2" size="small" type="warning">待审核</el-tag>
-          <el-tag v-if="row.auditStatus === 1" size="small" type="success">审核通过</el-tag>
-          <!-- 未通过原因展示 -->
-          <template v-if="row.auditStatus === 0">
-            <!-- <span class="status danger">审核未通过&nbsp;</span> -->
-            <el-popover placement="top-start" title="审核说明" width="400" trigger="hover" :content="row.invalidReason">
-              <el-tag slot="reference" size="small" type="danger" class="reason">
-                <span>审核未通过</span>
-                <span class="el-icon-question status danger" />
-              </el-tag>
-            </el-popover>
-            <!-- 未通过原因展示END -->
-          </template>
+          <audit-status :status="row.auditStatus" :reason="row.invalidReason" />
         </template>
       </el-table-column>
       <el-table-column label="上线状态" width="160px" align="center">

+ 1 - 13
src/views/normal/material/image/index.vue

@@ -45,19 +45,7 @@
       <el-table-column label="图片标题" prop="imageTitle" align="center" />
       <el-table-column label="审核状态" width="180px" align="center">
         <template slot-scope="{ row }">
-          <el-tag v-if="row.auditStatus === 2" size="small" type="warning">待审核</el-tag>
-          <el-tag v-if="row.auditStatus === 1" size="small" type="success">审核通过</el-tag>
-          <!-- 未通过原因展示 -->
-          <template v-if="row.auditStatus === 0">
-            <!-- <span class="status danger">审核未通过&nbsp;</span> -->
-            <el-popover placement="top-start" title="审核说明" width="400" trigger="hover" :content="row.invalidReason">
-              <el-tag slot="reference" size="small" type="danger" class="reason">
-                <span>审核未通过</span>
-                <span class="el-icon-question status danger" />
-              </el-tag>
-            </el-popover>
-            <!-- 未通过原因展示END -->
-          </template>
+          <audit-status :status="row.auditStatus" :reason="row.invalidReason" />
         </template>
       </el-table-column>
       <el-table-column label="上线状态" width="160px" align="center">

+ 1 - 13
src/views/normal/material/package/index.vue

@@ -45,19 +45,7 @@
       <el-table-column label="资料包标题" prop="fileTitle" align="center" />
       <el-table-column label="审核状态" width="120px" align="center">
         <template slot-scope="{ row }">
-          <el-tag v-if="row.auditStatus === 2" size="small" type="warning">待审核</el-tag>
-          <el-tag v-if="row.auditStatus === 1" size="small" type="success">审核通过</el-tag>
-          <!-- 未通过原因展示 -->
-          <template v-if="row.auditStatus === 0">
-            <!-- <span class="status danger">审核未通过&nbsp;</span> -->
-            <el-popover placement="top-start" title="审核说明" width="400" trigger="hover" :content="row.invalidReason">
-              <el-tag slot="reference" size="small" type="danger" class="reason">
-                <span>审核未通过</span>
-                <span class="el-icon-question status danger" />
-              </el-tag>
-            </el-popover>
-            <!-- 未通过原因展示END -->
-          </template>
+          <audit-status :status="row.auditStatus" :reason="row.invalidReason" />
         </template>
       </el-table-column>
       <el-table-column label="上线状态" width="160px" align="center">

+ 1 - 13
src/views/normal/material/video/index.vue

@@ -45,19 +45,7 @@
       <el-table-column label="视频标题" prop="videoTitle" align="center" />
       <el-table-column label="审核状态" width="120px" align="center">
         <template slot-scope="{ row }">
-          <el-tag v-if="row.auditStatus === 2" size="small" type="warning">待审核</el-tag>
-          <el-tag v-if="row.auditStatus === 1" size="small" type="success">审核通过</el-tag>
-          <!-- 未通过原因展示 -->
-          <template v-if="row.auditStatus === 0">
-            <!-- <span class="status danger">审核未通过&nbsp;</span> -->
-            <el-popover placement="top-start" title="审核说明" width="400" trigger="hover" :content="row.invalidReason">
-              <el-tag slot="reference" size="small" type="danger" class="reason">
-                <span>审核未通过</span>
-                <span class="el-icon-question status danger" />
-              </el-tag>
-            </el-popover>
-            <!-- 未通过原因展示END -->
-          </template>
+          <audit-status :status="row.auditStatus" :reason="row.invalidReason" />
         </template>
       </el-table-column>
       <el-table-column label="上线状态" width="160px" align="center">

+ 1 - 13
src/views/normal/personnel/operate/index.vue

@@ -45,19 +45,7 @@
 
       <el-table-column label="审核状态" width="120px" align="center">
         <template slot-scope="{ row }">
-          <el-tag v-if="row.auditStatus === 2" size="small" type="warning">待审核</el-tag>
-          <el-tag v-if="row.auditStatus === 1" size="small" type="success">审核通过</el-tag>
-          <!-- 未通过原因展示 -->
-          <template v-if="row.auditStatus === 0">
-            <!-- <span class="status danger">审核未通过&nbsp;</span> -->
-            <el-popover placement="top-start" title="审核说明" width="400" trigger="hover" :content="row.invalidReason">
-              <el-tag slot="reference" size="small" type="danger" class="reason">
-                <span>审核未通过</span>
-                <span class="el-icon-question status danger" />
-              </el-tag>
-            </el-popover>
-            <!-- 未通过原因展示END -->
-          </template>
+          <audit-status :status="row.auditStatus" :reason="row.invalidReason" />
         </template>
       </el-table-column>
 

+ 1 - 13
src/views/normal/personnel/training/index.vue

@@ -45,19 +45,7 @@
 
       <el-table-column label="审核状态" width="120px" align="center">
         <template slot-scope="{ row }">
-          <el-tag v-if="row.auditStatus === 2" size="small" type="warning">待审核</el-tag>
-          <el-tag v-if="row.auditStatus === 1" size="small" type="success">审核通过</el-tag>
-          <!-- 未通过原因展示 -->
-          <template v-if="row.auditStatus === 0">
-            <!-- <span class="status danger">审核未通过&nbsp;</span> -->
-            <el-popover placement="top-start" title="审核说明" width="400" trigger="hover" :content="row.invalidReason">
-              <el-tag slot="reference" size="small" type="danger" class="reason">
-                <span>审核未通过</span>
-                <span class="el-icon-question status danger" />
-              </el-tag>
-            </el-popover>
-            <!-- 未通过原因展示END -->
-          </template>
+          <audit-status :status="row.auditStatus" :reason="row.invalidReason" />
         </template>
       </el-table-column>