wupengfei
3 天以前 f35680f356168af8d4a3d5f34456e561af40fbba
src/views/OperationManage/OperationManageList.vue
@@ -5,45 +5,31 @@
        <template #query>
          <QueryFilterItem>
            <FieldSelect
              v-model="extraParamState.pageType"
              v-model="extraParamState.page"
              placeholder="广告页面"
              :value-enum="[]"
              :value-enum="EnumAdvertisementPageText"
              clearable
              @change="getAdvertiseOnShowList()"
              @change="getList()"
            />
          </QueryFilterItem>
          <QueryFilterItem tip-content="状态">
            <FieldRadio
              v-model="extraParamState.status"
              :value-enum="[
                { value: true, label: '展示中' },
                { value: false, label: '已下架' },
              ]"
              :value-enum="EnumAdvertisementStatusText"
              buttonStyle
              showAllBtn
              @change="getAdvertiseOnShowList()"
              @change="getList()"
            />
          </QueryFilterItem>
          <QueryFilterItem tip-content="广告开始时间">
          <QueryFilterItem tip-content="广告时间">
            <FieldDatePicker
              v-model="extraParamState.beginDate"
              v-model="extraParamState.time"
              type="daterange"
              range-separator="~"
              start-placeholder="开始日期"
              end-placeholder="结束日期"
              start-placeholder="开始时间"
              end-placeholder="结束时间"
              clearable
              @change="getAdvertiseOnShowList()"
            ></FieldDatePicker>
          </QueryFilterItem>
          <QueryFilterItem tip-content="广告结束时间">
            <FieldDatePicker
              v-model="extraParamState.endDate"
              type="daterange"
              range-separator="~"
              start-placeholder="开始日期"
              end-placeholder="结束日期"
              clearable
              @change="getAdvertiseOnShowList()"
              @change="getList()"
            ></FieldDatePicker>
          </QueryFilterItem>
          <QueryFilterItem>
@@ -51,7 +37,7 @@
              v-model="extraParamState.keyword"
              style="width: 260px"
              placeholder="广告名称"
              @on-click-search="getAdvertiseOnShowList"
              @on-click-search="getList"
            >
            </SearchInput>
          </QueryFilterItem>
@@ -69,6 +55,8 @@
      <ProTableV2 v-bind="proTableProps" :columns="column" :operationBtns="operationBtns">
      </ProTableV2>
    </AppContainer>
    <AddOrEditAdvertisementDialog v-bind="dialogProps"></AddOrEditAdvertisementDialog>
    <LogDialog v-bind="dialogLogProps"></LogDialog>
  </LoadingLayout>
</template>
@@ -89,10 +77,13 @@
  UploadUserFile,
} from '@bole-core/components';
import { useAccess } from '@/hooks';
import { FlexWorkerEleSignEnumText } from '@/constants';
import { EnumAdvertisementPageText, EnumAdvertisementStatusText } from '@/constants';
import { ModelValueType } from 'element-plus';
import { format, setOSSLink, convertApi2FormUrl, convertFormUrl2Api } from '@/utils';
import { format, convertApi2FormUrlOnlyOne } from '@/utils';
import { Message } from '@bole-core/core';
import * as advertisementServices from '@/services/api/advertisement';
import AddOrEditAdvertisementDialog from './components/AddOrEditAdvertisementDialog.vue';
import LogDialog from './components/LogDialog.vue';
defineOptions({
  name: 'OperationManageList',
@@ -103,17 +94,19 @@
  takeOnBtn: {
    emits: { onClick: (role) => setAdvertiseOnShowStatus(role) },
    extraProps: {
      hide: (row) => row.status,
      hide: (row: API.GetAdvertisementsQueryResultItem) =>
        row.status === EnumAdvertisementStatus.InProcess,
    },
  },
  takeDownBtn: {
    emits: { onClick: (role) => setAdvertiseOnShowStatus(role) },
    props: { type: 'danger' },
    extraProps: {
      hide: (row) => !row.status,
      hide: (row: API.GetAdvertisementsQueryResultItem) =>
        row.status === EnumAdvertisementStatus.Stopped,
    },
  },
  logBtn: { emits: { onClick: (role) => openDialog(role) } },
  logBtn: { emits: { onClick: (role) => openLogDialog(role) } },
};
const { checkSubModuleItemShow, column, operationBtns } = useAccess({
@@ -127,12 +120,12 @@
const state = reactive({ ...BaseState });
onMounted(async () => {
  await getAdvertiseOnShowList();
  await getList();
  state.loading = false;
});
const {
  getDataSource: getAdvertiseOnShowList,
  getDataSource: getList,
  proTableProps,
  paginationState,
  extraParamState,
@@ -140,15 +133,19 @@
} = useTable(
  async ({ pageIndex, pageSize }, extraParamState) => {
    try {
      let params: API.GetUserClientForBackInput = {
      let params: API.GetAdvertisementsQuery = {
        pageModel: {
          rows: pageSize,
          page: pageIndex,
          orderInput: extraParamState.orderInput,
        },
        searchKeys: extraParamState.keyword,
        keywords: extraParamState.keyword,
        beginTime: format(extraParamState.time[0], 'YYYY-MM-DD 00:00:00'),
        endTime: format(extraParamState.time[1], 'YYYY-MM-DD 23:59:59'),
        page: extraParamState.page,
        status: extraParamState.status,
      };
      let res = await flexEnterpriseWokerServices.getUserClientList(params, {
      let res = await advertisementServices.getAdvertisements(params, {
        showLoading: !state.loading,
      });
      return res;
@@ -157,27 +154,40 @@
  {
    defaultExtraParams: {
      keyword: '',
      pageType: '' as any as number,
      status: '' as any as boolean,
      beginDate: [] as unknown as ModelValueType,
      page: '' as any as EnumAdvertisementPage,
      status: '' as any as EnumAdvertisementStatus,
      time: [] as unknown as ModelValueType,
      endDate: [] as unknown as ModelValueType,
      orderInput: [{ property: 'sort', order: EnumPagedListOrder.Desc }],
      orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }],
    },
    columnsRenderProps: {},
    columnsRenderProps: {
      page: { type: 'enum', valueEnum: EnumAdvertisementPageText },
      status: { type: 'enum', valueEnum: EnumAdvertisementStatusText },
      url: {
        type: 'link',
        text: (row: API.GetAdvertisementsQueryResultItem) => (row.url ? '查看' : ''),
      },
      file: { type: 'url' },
      beginTime: { type: 'date', format: 'YYYY-MM-DD' },
      endTime: { type: 'date', format: 'YYYY-MM-DD' },
    },
  }
);
function openDialog(row?) {
async function openDialog(row?: API.GetAdvertisementsQueryResultItem) {
  if (row) {
    const res = await getAdvertisement(row.id);
    if (res) {
    handleEdit({
      id: row.id,
      pageType: row.pageType,
      advertiseName: row.advertiseName,
      advertiseLink: row.advertiseLink,
      imgInfo: row.imgInfo.map((x) => convertApi2FormUrl(x.imgUrl)),
      date: [format(row.advertiseBeginDate), format(row.advertiseEndDate)],
      sort: row.sort,
        id: res.id,
        page: res.page,
        name: res.name,
        url: res.url,
        file: res.file ? convertApi2FormUrlOnlyOne(res.file) : [],
        time: [format(res.beginTime), format(res.endTime)],
        sort: res.sort,
    });
    }
  } else {
    handleAdd();
  }
@@ -188,23 +198,79 @@
  defaultFormParams: {
    title: '新增广告',
    id: '',
    pageType: '' as any as number,
    advertiseName: '',
    advertiseLink: '',
    imgInfo: [] as UploadUserFile[],
    date: [] as unknown as ModelValueType,
    page: '' as any as EnumAdvertisementPage,
    name: '',
    url: '',
    file: [] as UploadUserFile[],
    time: [] as unknown as ModelValueType,
    sort: 0,
  },
  editTitle: '编辑广告',
  closeAfterConfirm: false,
});
async function handleAddOrEdit() {
  try {
    let params: API.SaveAdvertisementCommand = {
      page: editForm.page,
      name: editForm.name,
      url: editForm.url,
      file: editForm.file?.[0]?.url,
      beginTime: format(editForm.time[0], 'YYYY-MM-DD 00:00:00'),
      endTime: format(editForm.time[1], 'YYYY-MM-DD 23:59:59'),
      sort: editForm.sort,
    };
    if (editForm.id) {
      params.id = editForm.id;
    }
    let res = await advertisementServices.saveAdvertisement(params);
    if (res) {
      Message.successMessage('操作成功');
      getList(paginationState.pageIndex);
      dialogState.dialogVisible = false;
    }
  } catch (error) {}
}
async function setAdvertiseOnShowStatus(row) {
const {
  dialogProps: dialogLogProps,
  handleAdd: handleLogAdd,
  editForm: editLogForm,
} = useFormDialog({
  defaultFormParams: {
    id: '',
  },
});
function openLogDialog(row: API.GetAdvertisementsQueryResultItem) {
  handleLogAdd({
    id: row.id,
  });
}
async function getAdvertisement(id: string) {
  try {
    return await advertisementServices.getAdvertisement({ id: id });
  } catch (error) {}
}
async function setAdvertiseOnShowStatus(row: API.GetAdvertisementsQueryResultItem) {
  try {
    await Message.tipMessage(
      `确认要${row.status === EnumAdvertisementStatus.InProcess ? '下架' : '上架'}该广告吗?`
    );
    let params: API.SetAdvertisementStatusCommand = {
      ids: [row.id],
      status:
        row.status === EnumAdvertisementStatus.InProcess
          ? EnumAdvertisementStatus.Stopped
          : EnumAdvertisementStatus.InProcess,
    };
    let res = await advertisementServices.setAdvertisementStatus(params);
    if (res) {
      Message.successMessage('操作成功');
      getList(paginationState.pageIndex);
    }
  } catch (error) {}
}
</script>