index.vue 4.86 KB
<template>
  <page-view has-bread has-card>
    <filter-search :loading="loading" :model="filter" :inline="true" @search="onSearch" @reset="onReset">
      <filter-search-item label="系统类型">
        <a-select v-model="filter.os" :options="systemOption" :allow-clear="true" placeholder="请选择" />
      </filter-search-item>
      <filter-search-item label="强制更新">
        <a-select v-model="filter.is_force" :options="forceOption" :allow-clear="true" placeholder="请选择" />
      </filter-search-item>
      <filter-search-item label="内部版本">
        <a-input v-model="filter.appNoLike" :allow-clear="true" placeholder="请输入筛选版本号" />
      </filter-search-item>
    </filter-search>
    <filter-table ref="tableRef" :loading="loading" :on-query="onQuery">
      <template #tool>
        <icon-button v-permission="['system-version-create']" type="primary" icon="plus" label="新增" @click="handleCreate" />
      </template>
      <enum-table-column data-index="os" title="系统类型" :option="systemOption" align="center" :width="120" />
      <filter-table-column data-index="app_ver" title="版本号" align="center" :width="120">
        <template #default="{ record }">
          <a-link :hoverable="false" class="link-hover" :href="record.url" icon>{{ record.app_ver }}</a-link>
        </template>
      </filter-table-column>
      <filter-table-column data-index="app_no" title="内部号" align="center" :width="120" />
      <enum-table-column data-index="is_force" title="强制更新" align="center" :option="forceOption" :width="80" />
      <filter-table-column data-index="remark" title="说明" />
      <date-table-column data-index="created_at" title="发布时间" :split="false" :width="170" />
      <space-table-column
        v-if="usePermission().checkPermission(['system-version-edit', 'system-version-delete'])"
        :width="100"
        data-index="operations"
        title="操作"
      >
        <template #default="{ record }">
          <a-link v-permission="['system-version-edit']" :hoverable="false" class="link-hover" @click="handleUpdate(record)">编辑</a-link>
          <a-link v-permission="['system-version-delete']" :hoverable="false" class="link-hover" @click="handleDelete(record)">删除</a-link>
        </template>
      </space-table-column>
    </filter-table>
  </page-view>
</template>

<script lang="ts" setup>
  import { createVNode, onMounted, ref } from 'vue';
  import { AnyObject } from '@/types/global';
  import useVersionApi from '@/http/version';
  import useLoading from '@/hooks/loading';
  import EnumTableColumn from '@/components/filter/enum-table-column.vue';
  import DateTableColumn from '@/components/filter/date-table-column.vue';
  import SpaceTableColumn from '@/components/filter/space-table-column.vue';
  import FormContent from '@/views/system/version/components/form-content.vue';

  import usePermission from '@/hooks/permission';
  import { Message, TableData } from '@arco-design/web-vue';
  import { createModalVNode } from '@/utils/createVNode';
  import { promiseToBoolean } from '@/utils';

  const { systemOption, forceOption } = useVersionApi;

  const { loading, setLoading } = useLoading(false);
  const filter = ref<AnyObject>({});
  const tableRef = ref();

  const onQuery = async (params: AnyObject) => {
    setLoading(true);
    return useVersionApi.get({ ...filter.value, ...params, setSort: '-id' }).finally(() => setLoading(false));
  };

  const onSearch = () => tableRef.value?.onPageChange(1);

  const onReset = () => {
    filter.value = { appNoLike: '', is_force: '', os: '' };
    onSearch();
  };

  onMounted(() => onReset());

  const handleCreate = () => {
    const formValue = ref({ app_ver: '' });

    createModalVNode(() => createVNode(FormContent, { modelValue: formValue.value }), {
      title: '新增操作',
      onBeforeOk: () => promiseToBoolean(useVersionApi.create(formValue.value)),
      onOk: () => {
        tableRef.value?.onFetch();
        Message.success(`新增版本:${formValue.value.app_ver}`);
      },
    });
  };

  const handleUpdate = (row: TableData) => {
    const formValue = ref({ ...row });

    createModalVNode(() => createVNode(FormContent, { modelValue: formValue.value }), {
      title: '编辑操作',
      onBeforeOk: () => promiseToBoolean(useVersionApi.update(row.id, formValue.value)),
      onOk: () => {
        tableRef.value?.onFetch();
        Message.success(`更新版本:${formValue.value.app_ver}`);
      },
    });
  };

  const handleDelete = (row: TableData) =>
    createModalVNode(`确认要将版本信息:${row.app_ver} 删除吗?`, {
      title: '删除操作',
      maskClosable: true,
      onBeforeOk: () => promiseToBoolean(useVersionApi.destroy(row.id)),
      onOk: () => {
        tableRef.value?.onFetch();
        Message.success(`删除版本:${row.app_ver}`);
      },
    });
</script>

<style lang="less" scoped></style>