du
2025-05-30 6c11e2bd5451a1ee410ebdb27d724567c6b697d7
easegen-front/src/views/digitalcourse/template/index.vue
@@ -45,87 +45,178 @@
  <!-- 列表 -->
  <ContentWrap>
    <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
      <el-table-column :label="t('table.index')" align="center" type='index' width="60"/>
      <el-table-column :label="t('template.name')" align="center" prop="templateName" />
      <el-table-column :label="t('template.isShowBackground')" align="center" prop="showBackground" >
        <template #default="scope">
          <dict-tag :type="DICT_TYPE.IS_OR_NOT" :value="scope.row.showBackground" />
        </template>
      </el-table-column>
      <el-table-column :label="t('template.isShowDigitalPeople')" align="center" prop="showDigitalHuman" >
        <template #default="scope">
          <dict-tag :type="DICT_TYPE.IS_OR_NOT" :value="scope.row.showDigitalHuman" />
        </template>
      </el-table-column>
      <el-table-column :label="t('template.isShowPPt')" align="center" prop="showPpt" >
        <template #default="scope">
          <dict-tag :type="DICT_TYPE.IS_OR_NOT" :value="scope.row.showPpt" />
        </template>
      </el-table-column>
<!--      <el-table-column label="ppt宽" align="center" prop="pptW" />
      <el-table-column label="ppt高" align="center" prop="pptH" />
      <el-table-column label="ppt距离顶部位置" align="center" prop="pptX" />
      <el-table-column label="ppt距离左侧位置" align="center" prop="pptY" />
      <el-table-column label="数字人宽" align="center" prop="humanW" />
      <el-table-column label="数字人高" align="center" prop="humanH" />
      <el-table-column label="数字人距离顶部位置" align="center" prop="humanX" />
      <el-table-column label="数字人距离左侧位置" align="center" prop="humanY" />-->
      <el-table-column label="背景图片" align="center" prop="bgImage">
        <template #default="scope">
          <el-image
            :src="scope.row.bgImage"
            :preview-src-list="[scope.row.bgImage]"
            fit="cover"
            preview-teleported
    <el-tabs v-model="activeName" class="demo-tabs" @click="iszg">
      <el-tab-pane label="我的模板" name="first">
        <el-table :default-sort="{ prop: 'createTime', order: 'descending' }" v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
          <el-table-column :label="t('table.index')" align="center" type='index' width="60"/>
          <el-table-column :label="t('template.name')" align="center" prop="templateName" />
          <el-table-column :label="t('template.isShowBackground')" align="center" prop="showBackground" >
            <template #default="scope">
              <dict-tag :type="DICT_TYPE.IS_OR_NOT" :value="scope.row.showBackground" />
            </template>
          </el-table-column>
          <el-table-column :label="t('template.isShowDigitalPeople')" align="center" prop="showDigitalHuman" >
            <template #default="scope">
              <dict-tag :type="DICT_TYPE.IS_OR_NOT" :value="scope.row.showDigitalHuman" />
            </template>
          </el-table-column>
          <el-table-column :label="t('template.isShowPPt')" align="center" prop="showPpt" >
            <template #default="scope">
              <dict-tag :type="DICT_TYPE.IS_OR_NOT" :value="scope.row.showPpt" />
            </template>
          </el-table-column>
          <!--      <el-table-column label="ppt宽" align="center" prop="pptW" />
                <el-table-column label="ppt高" align="center" prop="pptH" />
                <el-table-column label="ppt距离顶部位置" align="center" prop="pptX" />
                <el-table-column label="ppt距离左侧位置" align="center" prop="pptY" />
                <el-table-column label="数字人宽" align="center" prop="humanW" />
                <el-table-column label="数字人高" align="center" prop="humanH" />
                <el-table-column label="数字人距离顶部位置" align="center" prop="humanX" />
                <el-table-column label="数字人距离左侧位置" align="center" prop="humanY" />-->
          <el-table-column label="背景图片" align="center" prop="bgImage">
            <template #default="scope">
              <el-image
                :src="scope.row.bgImage"
                :preview-src-list="[scope.row.bgImage]"
                fit="cover"
                preview-teleported
              />
            </template>
          </el-table-column>
          <el-table-column label="预览图片" align="center" prop="previewImage">
            <template #default="scope">
              <el-image
                :src="scope.row.previewImage"
                :preview-src-list="[scope.row.previewImage]"
                fit="cover"
                preview-teleported
              />
            </template>
          </el-table-column>
          <el-table-column
            :label="t('table.createTime')"
            align="center"
            prop="createTime"
            sortable
            :formatter="dateFormatter"
            width="180px"
          />
        </template>
      </el-table-column>
      <el-table-column label="预览图片" align="center" prop="previewImage">
        <template #default="scope">
          <el-image
            :src="scope.row.previewImage"
            :preview-src-list="[scope.row.previewImage]"
            fit="cover"
            preview-teleported
          <el-table-column :label="t('table.action')" align="center" min-width="120px">
            <template #default="scope">
              <el-button
                link
                type="primary"
                @click="openForm('update', scope.row.id)"
                v-hasPermi="['digitalcourse:template:update']"
              >
                {{ t('action.edit') }}
              </el-button>
              <el-button
                link
                type="danger"
                @click="handleDelete(scope.row.id)"
                v-hasPermi="['digitalcourse:template:delete']"
              >
                {{ t('action.del') }}
              </el-button>
            </template>
          </el-table-column>
        </el-table>
        <!-- 分页 -->
        <Pagination
          :total="total"
          v-model:page="queryParams.pageNo"
          v-model:limit="queryParams.pageSize"
          @pagination="getList"
        />
      </el-tab-pane>
      <el-tab-pane label="模板库模板" name="second">
        <el-table :default-sort="{ prop: 'createTime', order: 'descending' }" v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
          <el-table-column :label="t('table.index')" align="center" type='index' width="60"/>
          <el-table-column :label="t('template.name')" align="center" prop="templateName" />
          <el-table-column :label="t('template.isShowBackground')" align="center" prop="showBackground" >
            <template #default="scope">
              <dict-tag :type="DICT_TYPE.IS_OR_NOT" :value="scope.row.showBackground" />
            </template>
          </el-table-column>
          <el-table-column :label="t('template.isShowDigitalPeople')" align="center" prop="showDigitalHuman" >
            <template #default="scope">
              <dict-tag :type="DICT_TYPE.IS_OR_NOT" :value="scope.row.showDigitalHuman" />
            </template>
          </el-table-column>
          <el-table-column :label="t('template.isShowPPt')" align="center" prop="showPpt" >
            <template #default="scope">
              <dict-tag :type="DICT_TYPE.IS_OR_NOT" :value="scope.row.showPpt" />
            </template>
          </el-table-column>
          <!--      <el-table-column label="ppt宽" align="center" prop="pptW" />
                <el-table-column label="ppt高" align="center" prop="pptH" />
                <el-table-column label="ppt距离顶部位置" align="center" prop="pptX" />
                <el-table-column label="ppt距离左侧位置" align="center" prop="pptY" />
                <el-table-column label="数字人宽" align="center" prop="humanW" />
                <el-table-column label="数字人高" align="center" prop="humanH" />
                <el-table-column label="数字人距离顶部位置" align="center" prop="humanX" />
                <el-table-column label="数字人距离左侧位置" align="center" prop="humanY" />-->
          <el-table-column label="背景图片" align="center" prop="bgImage">
            <template #default="scope">
              <el-image
                :src="scope.row.bgImage"
                :preview-src-list="[scope.row.bgImage]"
                fit="cover"
                preview-teleported
              />
            </template>
          </el-table-column>
          <el-table-column label="预览图片" align="center" prop="previewImage">
            <template #default="scope">
              <el-image
                :src="scope.row.previewImage"
                :preview-src-list="[scope.row.previewImage]"
                fit="cover"
                preview-teleported
              />
            </template>
          </el-table-column>
          <el-table-column
            :label="t('table.createTime')"
            align="center"
            prop="createTime"
            sortable
            :formatter="dateFormatter"
            width="180px"
          />
        </template>
      </el-table-column>
      <el-table-column
        :label="t('table.createTime')"
        align="center"
        prop="createTime"
        :formatter="dateFormatter"
        width="180px"
      />
      <el-table-column :label="t('table.action')" align="center" min-width="120px">
        <template #default="scope">
          <el-button
            link
            type="primary"
            @click="openForm('update', scope.row.id)"
            v-hasPermi="['digitalcourse:template:update']"
          >
            {{ t('action.edit') }}
          </el-button>
          <el-button
            link
            type="danger"
            @click="handleDelete(scope.row.id)"
            v-hasPermi="['digitalcourse:template:delete']"
          >
            {{ t('action.del') }}
          </el-button>
        </template>
      </el-table-column>
    </el-table>
    <!-- 分页 -->
    <Pagination
      :total="total"
      v-model:page="queryParams.pageNo"
      v-model:limit="queryParams.pageSize"
      @pagination="getList"
    />
          <el-table-column :label="t('table.action')" align="center" min-width="120px" v-if="hasAdminRole">
            <template #default="scope">
              <el-button
                link
                type="primary"
                @click="openForm('update', scope.row.id)"
                v-hasPermi="['digitalcourse:template:update']"
              >
                {{ t('action.edit') }}
              </el-button>
              <el-button
                link
                type="danger"
                @click="handleDelete(scope.row.id)"
                v-hasPermi="['digitalcourse:template:delete']"
              >
                {{ t('action.del') }}
              </el-button>
            </template>
          </el-table-column>
        </el-table>
        <!-- 分页 -->
        <Pagination
          :total="total"
          v-model:page="queryParams.pageNo"
          v-model:limit="queryParams.pageSize"
          @pagination="getList"
        />
      </el-tab-pane>
    </el-tabs>
  </ContentWrap>
  <!-- 表单弹窗:添加/修改 -->
@@ -138,13 +229,14 @@
import { TemplateApi, TemplateVO } from '@/api/digitalcourse/template'
import TemplateForm from './TemplateForm.vue'
import {DICT_TYPE} from "@/utils/dict";
import type { TabsPaneContext } from 'element-plus'
import {getUserProfile} from "@/api/system/user/profile";
/** 模板 列表 */
defineOptions({ name: 'Template' })
const message = useMessage() // 消息弹窗
const { t } = useI18n() // 国际化
const activeName = ref('first')
const loading = ref(true) // 列表的加载中
const list = ref<TemplateVO[]>([]) // 列表的数据
const total = ref(0) // 列表的总页数
@@ -164,13 +256,18 @@
  humanY: undefined,
  bgImage: undefined,
  createTime: [],
  zg: 2
})
const queryFormRef = ref() // 搜索的表单
const exportLoading = ref(false) // 导出的加载中
let userInfo = ref()
let hasAdminRole = ref(false)
/** 查询列表 */
const getList = async () => {
  loading.value = true
  userInfo.value = await getUserProfile()
   hasAdminRole = userInfo.value.roles.some(role => role.name === '数字人管理员')
  try {
    const data = await TemplateApi.getTemplatePage(queryParams)
    list.value = data.list
@@ -189,6 +286,7 @@
/** 重置按钮操作 */
const resetQuery = () => {
  queryFormRef.value.resetFields()
  queryParams.zg = '2'
  handleQuery()
}
@@ -225,6 +323,16 @@
    exportLoading.value = false
  }
}
const iszg = () => {
  console.log(activeName)
  if (activeName.value == 'first') {
    queryParams.zg = 2
    getList()
  }else if (activeName.value == 'second') {
    queryParams.zg = 1
    getList()
  }
}
/** 初始化 **/
onMounted(() => {