|
|
@@ -0,0 +1,265 @@
|
|
|
+import { DataModel, transformArrayDataModel, transformDataModel, type KeyValue } from '@imengyu/js-request-transform';
|
|
|
+import { AppServerRequestModule } from '../RequestModules';
|
|
|
+import { transformSomeToArray } from '../Utils';
|
|
|
+
|
|
|
+export class PostMessage extends DataModel<PostMessage> {
|
|
|
+ constructor() {
|
|
|
+ super(PostMessage, "微信贴图");
|
|
|
+ this.setNameMapperCase('Camel', 'Snake');
|
|
|
+ this._convertTable = {
|
|
|
+ id: { clientSide: 'number', serverSide: 'number', clientSideRequired: true },
|
|
|
+ title: { clientSide: 'string', serverSide: 'string' },
|
|
|
+ images: { clientSide: 'splitCommaArray', serverSide: 'commaArrayMerge' },
|
|
|
+ sendTime: { clientSide: 'date', serverSide: 'string' },
|
|
|
+ }
|
|
|
+ this._afterSolveServer = () => {
|
|
|
+ if (!this.images) {
|
|
|
+ this.images = [];
|
|
|
+ }
|
|
|
+ if (this.image && this.images?.length == 0) {
|
|
|
+ this.images = [ this.image ];
|
|
|
+ }
|
|
|
+ if (!this.nickName)
|
|
|
+ this.nickName = this.nickname as string || '';
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ id !: number;
|
|
|
+ title = '';
|
|
|
+ content = '';
|
|
|
+ images = [] as string[];
|
|
|
+ image = '';
|
|
|
+ jumpUrl = '';
|
|
|
+ nickName = '';
|
|
|
+ topicName = '';
|
|
|
+ avatar = '';
|
|
|
+ likeCount = 0;
|
|
|
+ shareCount = 0;
|
|
|
+ sendTime = new Date();
|
|
|
+
|
|
|
+ ext?: StickerSearchResult;
|
|
|
+}
|
|
|
+
|
|
|
+export class TopicItem extends DataModel<TopicItem> {
|
|
|
+ constructor() {
|
|
|
+ super(TopicItem, '话题');
|
|
|
+ this.setNameMapperCase('Camel', 'Snake');
|
|
|
+ this._convertTable = {
|
|
|
+ interactionCount: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ itemCount: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ readCount: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ readCountInWxa: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ /** 话题名称 */
|
|
|
+ topic = '';
|
|
|
+ /** 互动数 */
|
|
|
+ interactionCount = 0;
|
|
|
+ /** 是否API发布汇总: 0=否 */
|
|
|
+ isApiPubSummary = 0;
|
|
|
+ /** 内容数 */
|
|
|
+ itemCount = 0;
|
|
|
+ /** 阅读数 */
|
|
|
+ readCount = 0;
|
|
|
+ /** 小程序内阅读数 */
|
|
|
+ readCountInWxa = 0;
|
|
|
+}
|
|
|
+
|
|
|
+export class TopicListSummary extends DataModel<TopicListSummary> {
|
|
|
+ constructor() {
|
|
|
+ super(TopicListSummary, '话题汇总');
|
|
|
+ this.setNameMapperCase('Camel', 'Snake');
|
|
|
+ this._convertTable = {
|
|
|
+ interactionCount: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ itemCount: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ readCount: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ readCountInWxa: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ /** 总互动数 */
|
|
|
+ interactionCount = 0;
|
|
|
+ /** 总内容数 */
|
|
|
+ itemCount = 0;
|
|
|
+ /** 总阅读数 */
|
|
|
+ readCount = 0;
|
|
|
+ /** 小程序内总阅读数 */
|
|
|
+ readCountInWxa = 0;
|
|
|
+}
|
|
|
+
|
|
|
+export class StickerPictureInfo extends DataModel<StickerPictureInfo> {
|
|
|
+ constructor() {
|
|
|
+ super(StickerPictureInfo, '贴图图片信息');
|
|
|
+ this.setNameMapperCase('Camel', 'Snake');
|
|
|
+ this._convertTable = {
|
|
|
+ width: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ height: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ cdnUrl = '';
|
|
|
+ width = 0;
|
|
|
+ height = 0;
|
|
|
+ shareCover = [] as string[];
|
|
|
+}
|
|
|
+
|
|
|
+export class StickerMsgId extends DataModel<StickerMsgId> {
|
|
|
+ constructor() {
|
|
|
+ super(StickerMsgId, '贴图消息ID');
|
|
|
+ this.setNameMapperCase('Camel', 'Snake');
|
|
|
+ this._convertTable = {
|
|
|
+ bizuin: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ idx: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ msgid: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ bizuin = 0;
|
|
|
+ idx = 0;
|
|
|
+ msgid = 0;
|
|
|
+}
|
|
|
+
|
|
|
+export interface StickerSearchResult {
|
|
|
+ /** 贴图标题 */
|
|
|
+ title: string;
|
|
|
+ /** 是否置顶: 0=否, 1=是 */
|
|
|
+ isTop: number;
|
|
|
+ /** 是否拉黑: 0=否, 1=是 */
|
|
|
+ isBlock: number;
|
|
|
+ /** 图片信息 */
|
|
|
+ pictureInfo: StickerPictureInfo;
|
|
|
+ /** 消息ID */
|
|
|
+ id: StickerMsgId;
|
|
|
+}
|
|
|
+
|
|
|
+export class OfficialApi extends AppServerRequestModule<DataModel> {
|
|
|
+
|
|
|
+ constructor() {
|
|
|
+ super();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取微信贴图列表
|
|
|
+ */
|
|
|
+ async getMessages(page: number, pageSize: number, search?:{
|
|
|
+ keywords?: string;
|
|
|
+ villageId?: number;
|
|
|
+ userId?: number;
|
|
|
+ }) {
|
|
|
+ const res = await this.get<{
|
|
|
+ data: KeyValue[],
|
|
|
+ total: number,
|
|
|
+ }>('/village/collect/wechatContentList', '获取微信贴图列表', {
|
|
|
+ page,
|
|
|
+ pageSize,
|
|
|
+ keywords: search?.keywords,
|
|
|
+ village_id: search?.villageId,
|
|
|
+ user_id: search?.userId,
|
|
|
+ });
|
|
|
+ const data = res.requireData();
|
|
|
+ return {
|
|
|
+ list: transformArrayDataModel<PostMessage>(PostMessage, transformSomeToArray(data.data), '微信贴图列表', true),
|
|
|
+ total: data.total,
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取贴图详情
|
|
|
+ */
|
|
|
+ async getMessageDetails(id: number) {
|
|
|
+ const res = await this.get<KeyValue>('/village/collect/wechatContentDetail', '获取微信贴图详情', {
|
|
|
+ id: id,
|
|
|
+ });
|
|
|
+ return transformDataModel<PostMessage>(PostMessage, res.requireData());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 发布贴图
|
|
|
+ */
|
|
|
+ async publishMessage(params: PostMessage) {
|
|
|
+ return await this.post<KeyValue>('/village/collect/wechatContentSave', '发布微信贴图', params.toServerSide());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取话题列表
|
|
|
+ */
|
|
|
+ async getTopicList(page: number, pageSize: number, keywords?: string) {
|
|
|
+ const res = await this.post<{
|
|
|
+ data: KeyValue,
|
|
|
+ success: boolean,
|
|
|
+ }>('/village/topic/topicList', '获取话题列表', {
|
|
|
+ current: page,
|
|
|
+ offset: pageSize,
|
|
|
+ keywords,
|
|
|
+ });
|
|
|
+ const raw = res.requireData();
|
|
|
+ const data = raw.data as KeyValue;
|
|
|
+ return {
|
|
|
+ topics: transformArrayDataModel<TopicItem>(TopicItem, transformSomeToArray(data.topics), '话题列表', true),
|
|
|
+ summary: transformDataModel<TopicListSummary>(TopicListSummary, data.summary as KeyValue),
|
|
|
+ total: data.total as number,
|
|
|
+ keywords: (data.keywords || []) as string[],
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 搜索贴图详细信息
|
|
|
+ */
|
|
|
+ async stickerSearch(topicName: string, stickerUrl: string) {
|
|
|
+ const res = await this.post<{
|
|
|
+ data: KeyValue,
|
|
|
+ success: boolean,
|
|
|
+ }>('/village/topic/stickerSearch', '搜索贴图详细信息', {
|
|
|
+ topic_name: topicName,
|
|
|
+ sticker_url: stickerUrl,
|
|
|
+ });
|
|
|
+ const raw = res.requireData();
|
|
|
+ const msg = (raw.data as KeyValue).msg as KeyValue;
|
|
|
+ return {
|
|
|
+ title: msg.title as string,
|
|
|
+ isTop: msg.is_top as number,
|
|
|
+ isBlock: msg.is_block as number,
|
|
|
+ pictureInfo: transformDataModel<StickerPictureInfo>(StickerPictureInfo, msg.picture_info as KeyValue),
|
|
|
+ id: transformDataModel<StickerMsgId>(StickerMsgId, msg.id as KeyValue),
|
|
|
+ } as StickerSearchResult;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 贴图置顶 / 取消置顶
|
|
|
+ * @param action top=置顶, cancel=取消置顶
|
|
|
+ */
|
|
|
+ async stickerTop(topicName: string, stickerUrl: string, action: 'top' | 'cancel') {
|
|
|
+ await this.post<KeyValue>('/village/topic/stickerTop', '贴图置顶', {
|
|
|
+ topic_name: topicName,
|
|
|
+ sticker_url: stickerUrl,
|
|
|
+ action,
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 贴图拉黑 / 取消拉黑
|
|
|
+ * @param action block=拉黑, cancel=取消拉黑
|
|
|
+ */
|
|
|
+ async stickerBlock(topicName: string, stickerUrl: string, action: 'block' | 'cancel') {
|
|
|
+ await this.post<KeyValue>('/village/topic/stickerBlock', '贴图拉黑', {
|
|
|
+ topic_name: topicName,
|
|
|
+ sticker_url: stickerUrl,
|
|
|
+ action,
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 检查贴图管理权限
|
|
|
+ * @returns 是否有权限
|
|
|
+ */
|
|
|
+ async checkTopicRule(villageId: number) {
|
|
|
+ const res = await this.post<boolean>('/village/topic/checkTopicRule', '检查贴图管理权限', {
|
|
|
+ village_id: villageId,
|
|
|
+ });
|
|
|
+ return res.requireData();
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+export default new OfficialApi();
|