Commit 90ffe5adb769fd1dc3e954fdb485107476838a12
1 parent
28884ee6
mp:增加图文草稿箱的修改;优化前端代码
Showing
8 changed files
with
364 additions
and
347 deletions
yudao-module-mp/yudao-module-mp-api/src/main/java/cn/iocoder/yudao/module/mp/enums/ErrorCodeConstants.java
| @@ -46,6 +46,7 @@ public interface ErrorCodeConstants { | @@ -46,6 +46,7 @@ public interface ErrorCodeConstants { | ||
| 46 | // ========== 公众号草稿 1006007000============ | 46 | // ========== 公众号草稿 1006007000============ |
| 47 | ErrorCode DRAFT_LIST_FAIL = new ErrorCode(1006007000, "获得草稿列表失败,原因:{}"); | 47 | ErrorCode DRAFT_LIST_FAIL = new ErrorCode(1006007000, "获得草稿列表失败,原因:{}"); |
| 48 | ErrorCode DRAFT_CREATE_FAIL = new ErrorCode(1006007001, "创建草稿失败,原因:{}"); | 48 | ErrorCode DRAFT_CREATE_FAIL = new ErrorCode(1006007001, "创建草稿失败,原因:{}"); |
| 49 | + ErrorCode DRAFT_UPDATE_FAIL = new ErrorCode(1006007002, "更新草稿失败,原因:{}"); | ||
| 49 | 50 | ||
| 50 | // TODO 要处理下 | 51 | // TODO 要处理下 |
| 51 | ErrorCode MENU_NOT_EXISTS = new ErrorCode(1006001002, "菜单不存在"); | 52 | ErrorCode MENU_NOT_EXISTS = new ErrorCode(1006001002, "菜单不存在"); |
yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/controller/admin/material/vo/MpMaterialPageReqVO.java
| @@ -7,12 +7,18 @@ import lombok.Data; | @@ -7,12 +7,18 @@ import lombok.Data; | ||
| 7 | import lombok.EqualsAndHashCode; | 7 | import lombok.EqualsAndHashCode; |
| 8 | import lombok.ToString; | 8 | import lombok.ToString; |
| 9 | 9 | ||
| 10 | +import javax.validation.constraints.NotNull; | ||
| 11 | + | ||
| 10 | @ApiModel("管理后台 - 公众号素材的分页 Request VO") | 12 | @ApiModel("管理后台 - 公众号素材的分页 Request VO") |
| 11 | @Data | 13 | @Data |
| 12 | @EqualsAndHashCode(callSuper = true) | 14 | @EqualsAndHashCode(callSuper = true) |
| 13 | @ToString(callSuper = true) | 15 | @ToString(callSuper = true) |
| 14 | public class MpMaterialPageReqVO extends PageParam { | 16 | public class MpMaterialPageReqVO extends PageParam { |
| 15 | 17 | ||
| 18 | + @ApiModelProperty(value = "公众号账号的编号", required = true, example = "2048") | ||
| 19 | + @NotNull(message = "公众号账号的编号不能为空") | ||
| 20 | + private Long accountId; | ||
| 21 | + | ||
| 16 | @ApiModelProperty(value = "是否永久", example = "true") | 22 | @ApiModelProperty(value = "是否永久", example = "true") |
| 17 | private Boolean permanent; | 23 | private Boolean permanent; |
| 18 | 24 |
yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/controller/admin/news/MpDraftController.http
| @@ -30,3 +30,25 @@ tenant-id: {{adminTenentId}} | @@ -30,3 +30,25 @@ tenant-id: {{adminTenentId}} | ||
| 30 | } | 30 | } |
| 31 | ] | 31 | ] |
| 32 | } | 32 | } |
| 33 | + | ||
| 34 | +### 请求 /mp/draft/create 接口 => 成功 | ||
| 35 | +PUT {{baseUrl}}/mp/draft/update?accountId=1&mediaId=r6ryvl6LrxBU0miaST4Y-q-G9pdsmZw0OYG4FzHQkKfpLfEwIH51wy2bxisx8PvW | ||
| 36 | +Content-Type: application/json | ||
| 37 | +Authorization: Bearer {{token}} | ||
| 38 | +tenant-id: {{adminTenentId}} | ||
| 39 | + | ||
| 40 | +[{ | ||
| 41 | + "title": "我是标题(OOO)", | ||
| 42 | + "author": "我是作者", | ||
| 43 | + "digest": "我是摘要", | ||
| 44 | + "content": "我是内容", | ||
| 45 | + "contentSourceUrl": "https://www.iocoder.cn", | ||
| 46 | + "thumbMediaId": "r6ryvl6LrxBU0miaST4Y-pIcmK-zAAId-9TGgy-DrSLhjVuWbuT3ZBjk9K1yQ0Dn" | ||
| 47 | +}, { | ||
| 48 | + "title": "我是标题(XXX)", | ||
| 49 | + "author": "我是作者", | ||
| 50 | + "digest": "我是摘要", | ||
| 51 | + "content": "我是内容", | ||
| 52 | + "contentSourceUrl": "https://www.iocoder.cn", | ||
| 53 | + "thumbMediaId": "r6ryvl6LrxBU0miaST4Y-pIcmK-zAAId-9TGgy-DrSLhjVuWbuT3ZBjk9K1yQ0Dn" | ||
| 54 | +}] |
yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/controller/admin/news/MpDraftController.java
| @@ -7,21 +7,20 @@ import cn.iocoder.yudao.module.mp.controller.admin.news.vo.MpDraftPageReqVO; | @@ -7,21 +7,20 @@ import cn.iocoder.yudao.module.mp.controller.admin.news.vo.MpDraftPageReqVO; | ||
| 7 | import cn.iocoder.yudao.module.mp.framework.mp.core.MpServiceFactory; | 7 | import cn.iocoder.yudao.module.mp.framework.mp.core.MpServiceFactory; |
| 8 | import io.swagger.annotations.Api; | 8 | import io.swagger.annotations.Api; |
| 9 | import io.swagger.annotations.ApiImplicitParam; | 9 | import io.swagger.annotations.ApiImplicitParam; |
| 10 | +import io.swagger.annotations.ApiImplicitParams; | ||
| 10 | import io.swagger.annotations.ApiOperation; | 11 | import io.swagger.annotations.ApiOperation; |
| 11 | import me.chanjar.weixin.common.error.WxErrorException; | 12 | import me.chanjar.weixin.common.error.WxErrorException; |
| 12 | import me.chanjar.weixin.mp.api.WxMpService; | 13 | import me.chanjar.weixin.mp.api.WxMpService; |
| 13 | -import me.chanjar.weixin.mp.bean.draft.WxMpAddDraft; | ||
| 14 | -import me.chanjar.weixin.mp.bean.draft.WxMpDraftItem; | ||
| 15 | -import me.chanjar.weixin.mp.bean.draft.WxMpDraftList; | 14 | +import me.chanjar.weixin.mp.bean.draft.*; |
| 16 | import org.springframework.validation.annotation.Validated; | 15 | import org.springframework.validation.annotation.Validated; |
| 17 | import org.springframework.web.bind.annotation.*; | 16 | import org.springframework.web.bind.annotation.*; |
| 18 | 17 | ||
| 19 | import javax.annotation.Resource; | 18 | import javax.annotation.Resource; |
| 19 | +import java.util.List; | ||
| 20 | 20 | ||
| 21 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | 21 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| 22 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | 22 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| 23 | -import static cn.iocoder.yudao.module.mp.enums.ErrorCodeConstants.DRAFT_CREATE_FAIL; | ||
| 24 | -import static cn.iocoder.yudao.module.mp.enums.ErrorCodeConstants.DRAFT_LIST_FAIL; | 23 | +import static cn.iocoder.yudao.module.mp.enums.ErrorCodeConstants.*; |
| 25 | 24 | ||
| 26 | // TODO 芋艿:权限 | 25 | // TODO 芋艿:权限 |
| 27 | @Api(tags = "管理后台 - 公众号草稿") | 26 | @Api(tags = "管理后台 - 公众号草稿") |
| @@ -54,14 +53,37 @@ public class MpDraftController { | @@ -54,14 +53,37 @@ public class MpDraftController { | ||
| 54 | @ApiImplicitParam(name = "accountId", value = "公众号账号的编号", required = true, | 53 | @ApiImplicitParam(name = "accountId", value = "公众号账号的编号", required = true, |
| 55 | example = "1024", dataTypeClass = Long.class) | 54 | example = "1024", dataTypeClass = Long.class) |
| 56 | public CommonResult<String> createDraft(@RequestParam("accountId") Long accountId, | 55 | public CommonResult<String> createDraft(@RequestParam("accountId") Long accountId, |
| 57 | - @RequestBody WxMpAddDraft reqVO) { | 56 | + @RequestBody WxMpAddDraft draft) { |
| 58 | WxMpService mpService = mpServiceFactory.getRequiredMpService(accountId); | 57 | WxMpService mpService = mpServiceFactory.getRequiredMpService(accountId); |
| 59 | try { | 58 | try { |
| 60 | - String mediaId = mpService.getDraftService().addDraft(reqVO); | 59 | + String mediaId = mpService.getDraftService().addDraft(draft); |
| 61 | return success(mediaId); | 60 | return success(mediaId); |
| 62 | } catch (WxErrorException e) { | 61 | } catch (WxErrorException e) { |
| 63 | throw exception(DRAFT_CREATE_FAIL, e.getError().getErrorMsg()); | 62 | throw exception(DRAFT_CREATE_FAIL, e.getError().getErrorMsg()); |
| 64 | } | 63 | } |
| 65 | } | 64 | } |
| 66 | 65 | ||
| 66 | + @PutMapping("/update") | ||
| 67 | + @ApiOperation("更新草稿") | ||
| 68 | + @ApiImplicitParams({ | ||
| 69 | + @ApiImplicitParam(name = "accountId", value = "公众号账号的编号", required = true, | ||
| 70 | + example = "1024", dataTypeClass = Long.class), | ||
| 71 | + @ApiImplicitParam(name = "mediaId", value = "草稿素材的编号", required = true, | ||
| 72 | + example = "xxx", dataTypeClass = String.class), | ||
| 73 | + }) | ||
| 74 | + public CommonResult<Boolean> createDraft(@RequestParam("accountId") Long accountId, | ||
| 75 | + @RequestParam("mediaId") String mediaId, | ||
| 76 | + @RequestBody List<WxMpDraftArticles> articles) { | ||
| 77 | + WxMpService mpService = mpServiceFactory.getRequiredMpService(accountId); | ||
| 78 | + try { | ||
| 79 | + for (int i = 0; i < articles.size(); i++) { | ||
| 80 | + WxMpDraftArticles article = articles.get(i); | ||
| 81 | + mpService.getDraftService().updateDraft(new WxMpUpdateDraft(mediaId, i, article)); | ||
| 82 | + } | ||
| 83 | + return success(true); | ||
| 84 | + } catch (WxErrorException e) { | ||
| 85 | + throw exception(DRAFT_UPDATE_FAIL, e.getError().getErrorMsg()); | ||
| 86 | + } | ||
| 87 | + } | ||
| 88 | + | ||
| 67 | } | 89 | } |
yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/dal/mysql/material/MpMaterialMapper.java
| @@ -20,6 +20,7 @@ public interface MpMaterialMapper extends BaseMapperX<MpMaterialDO> { | @@ -20,6 +20,7 @@ public interface MpMaterialMapper extends BaseMapperX<MpMaterialDO> { | ||
| 20 | 20 | ||
| 21 | default PageResult<MpMaterialDO> selectPage(MpMaterialPageReqVO pageReqVO) { | 21 | default PageResult<MpMaterialDO> selectPage(MpMaterialPageReqVO pageReqVO) { |
| 22 | return selectPage(pageReqVO, new LambdaQueryWrapperX<MpMaterialDO>() | 22 | return selectPage(pageReqVO, new LambdaQueryWrapperX<MpMaterialDO>() |
| 23 | + .eq(MpMaterialDO::getAccountId, pageReqVO.getAccountId()) | ||
| 23 | .eqIfPresent(MpMaterialDO::getPermanent, pageReqVO.getPermanent()) | 24 | .eqIfPresent(MpMaterialDO::getPermanent, pageReqVO.getPermanent()) |
| 24 | .eqIfPresent(MpMaterialDO::getType, pageReqVO.getType())); | 25 | .eqIfPresent(MpMaterialDO::getType, pageReqVO.getType())); |
| 25 | } | 26 | } |
yudao-ui-admin/src/api/mp/draft.js
| @@ -19,3 +19,12 @@ export function createDraft(accountId, articles) { | @@ -19,3 +19,12 @@ export function createDraft(accountId, articles) { | ||
| 19 | } | 19 | } |
| 20 | }) | 20 | }) |
| 21 | } | 21 | } |
| 22 | + | ||
| 23 | +// 更新草稿 | ||
| 24 | +export function updateDraft(accountId, mediaId, articles) { | ||
| 25 | + return request({ | ||
| 26 | + url: '/mp/draft/update?accountId=' + accountId + '&mediaId=' + mediaId, | ||
| 27 | + method: 'put', | ||
| 28 | + data: articles | ||
| 29 | + }) | ||
| 30 | +} |
yudao-ui-admin/src/views/mp/components/wx-material-select/main.vue
| @@ -117,7 +117,7 @@ | @@ -117,7 +117,7 @@ | ||
| 117 | }, | 117 | }, |
| 118 | props: { | 118 | props: { |
| 119 | objData: { | 119 | objData: { |
| 120 | - type: Object, | 120 | + type: Object, // type - 类型;accountId - 公众号账号编号 |
| 121 | required: true | 121 | required: true |
| 122 | }, | 122 | }, |
| 123 | newsType:{ // 图文类型:1、已发布图文;2、草稿箱图文 | 123 | newsType:{ // 图文类型:1、已发布图文;2、草稿箱图文 |
| @@ -148,6 +148,11 @@ | @@ -148,6 +148,11 @@ | ||
| 148 | selectMaterial(item) { | 148 | selectMaterial(item) { |
| 149 | this.$emit('selectMaterial', item) | 149 | this.$emit('selectMaterial', item) |
| 150 | }, | 150 | }, |
| 151 | + /** 搜索按钮操作 */ | ||
| 152 | + handleQuery() { | ||
| 153 | + this.queryParams.pageNo = 1 | ||
| 154 | + this.getPage() | ||
| 155 | + }, | ||
| 151 | getPage() { | 156 | getPage() { |
| 152 | this.loading = true | 157 | this.loading = true |
| 153 | if (this.objData.type === 'news' && this.newsType === '1') { // 【图文】+ 【已发布】 | 158 | if (this.objData.type === 'news' && this.newsType === '1') { // 【图文】+ 【已发布】 |
yudao-ui-admin/src/views/mp/draft/index.vue
| @@ -20,6 +20,8 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | @@ -20,6 +20,8 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
| 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
| 22 | SOFTWARE. | 22 | SOFTWARE. |
| 23 | + 芋道源码: | ||
| 24 | + ① 优化代码,和项目的代码保持一致 | ||
| 23 | --> | 25 | --> |
| 24 | <template> | 26 | <template> |
| 25 | <div class="app-container"> | 27 | <div class="app-container"> |
| @@ -54,7 +56,7 @@ SOFTWARE. | @@ -54,7 +56,7 @@ SOFTWARE. | ||
| 54 | <!-- TODO 芋艿:权限、样式(搜索框之类的) --> | 56 | <!-- TODO 芋艿:权限、样式(搜索框之类的) --> |
| 55 | <el-row class="ope-row"> | 57 | <el-row class="ope-row"> |
| 56 | <el-button type="success" circle @click="handlePublishNews(item)">发布</el-button> | 58 | <el-button type="success" circle @click="handlePublishNews(item)">发布</el-button> |
| 57 | - <el-button type="primary" icon="el-icon-edit" circle @click="handleEditNews(item)"></el-button> | 59 | + <el-button type="primary" icon="el-icon-edit" circle @click="handleUpdate(item)"></el-button> |
| 58 | <el-button type="danger" icon="el-icon-delete" circle @click="delMaterial(item)"></el-button> | 60 | <el-button type="danger" icon="el-icon-delete" circle @click="delMaterial(item)"></el-button> |
| 59 | </el-row> | 61 | </el-row> |
| 60 | </div> | 62 | </div> |
| @@ -66,14 +68,10 @@ SOFTWARE. | @@ -66,14 +68,10 @@ SOFTWARE. | ||
| 66 | <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize" | 68 | <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize" |
| 67 | @pagination="getList"/> | 69 | @pagination="getList"/> |
| 68 | 70 | ||
| 69 | - <!-- TODO 芋艿:位置调整 --> | 71 | + <!-- 添加或修改草稿对话框 --> |
| 70 | <el-dialog :title="operateMaterial === 'add' ? '新建图文' : '修改图文'" | 72 | <el-dialog :title="operateMaterial === 'add' ? '新建图文' : '修改图文'" |
| 71 | - append-to-body | ||
| 72 | - :before-close="dialogNewsClose" | ||
| 73 | - :close-on-click-modal="false" | ||
| 74 | - :visible.sync="dialogNewsVisible" | ||
| 75 | - width="80%" | ||
| 76 | - top="20px"> | 73 | + append-to-body width="80%" top="20px" :visible.sync="dialogNewsVisible" |
| 74 | + :before-close="dialogNewsClose" :close-on-click-modal="false"> | ||
| 77 | <div class="left"> | 75 | <div class="left"> |
| 78 | <div class="select-item"> | 76 | <div class="select-item"> |
| 79 | <div v-for="(news, index) in articlesAdd" :key='news.id'> | 77 | <div v-for="(news, index) in articlesAdd" :key='news.id'> |
| @@ -115,12 +113,11 @@ SOFTWARE. | @@ -115,12 +113,11 @@ SOFTWARE. | ||
| 115 | </div> | 113 | </div> |
| 116 | </div> | 114 | </div> |
| 117 | <div class="right" v-loading="addMaterialLoading" v-if="articlesAdd.length > 0"> | 115 | <div class="right" v-loading="addMaterialLoading" v-if="articlesAdd.length > 0"> |
| 118 | - <!--富文本编辑器组件--> | ||
| 119 | - <el-row> | ||
| 120 | - <wx-editor v-model="articlesAdd[isActiveAddNews].content" :account-id="this.uploadData.accountId" | ||
| 121 | - v-if="hackResetEditor"/> | ||
| 122 | - </el-row> | ||
| 123 | - <br><br><br><br> | 116 | + <br /> <br /> <br /> <br /> |
| 117 | + <!-- 标题、作者、原文地址 --> | ||
| 118 | + <el-input v-model="articlesAdd[isActiveAddNews].title" placeholder="请输入标题(必填)" /> | ||
| 119 | + <el-input v-model="articlesAdd[isActiveAddNews].author" placeholder="请输入作者" style="margin-top: 5px;" /> | ||
| 120 | + <el-input v-model="articlesAdd[isActiveAddNews].contentSourceUrl" placeholder="请输入原文地址" style="margin-top: 5px;" /> | ||
| 124 | <!-- 封面和摘要 --> | 121 | <!-- 封面和摘要 --> |
| 125 | <div class="input-tt">封面和摘要:</div> | 122 | <div class="input-tt">封面和摘要:</div> |
| 126 | <div> | 123 | <div> |
| @@ -137,20 +134,20 @@ SOFTWARE. | @@ -137,20 +134,20 @@ SOFTWARE. | ||
| 137 | <div slot="tip" class="el-upload__tip">支持 bmp/png/jpeg/jpg/gif 格式,大小不超过 2M</div> | 134 | <div slot="tip" class="el-upload__tip">支持 bmp/png/jpeg/jpg/gif 格式,大小不超过 2M</div> |
| 138 | </el-upload> | 135 | </el-upload> |
| 139 | </div> | 136 | </div> |
| 137 | + <el-dialog title="选择图片" :visible.sync="dialogImageVisible" width="80%" append-to-body> | ||
| 138 | + <wx-material-select ref="materialSelect" :objData="{type: 'image', accountId: this.queryParams.accountId}" | ||
| 139 | + @selectMaterial="selectMaterial" /> | ||
| 140 | + </el-dialog> | ||
| 140 | </div> | 141 | </div> |
| 141 | - <el-dialog title="选择图片" :visible.sync="dialogImageVisible" width="80%" append-to-body> | ||
| 142 | - <WxMaterialSelect :objData="{repType:'image'}" @selectMaterial="selectMaterial" /> | ||
| 143 | - </el-dialog> | ||
| 144 | <el-input :rows="8" type="textarea" v-model="articlesAdd[isActiveAddNews].digest" placeholder="请输入摘要" | 142 | <el-input :rows="8" type="textarea" v-model="articlesAdd[isActiveAddNews].digest" placeholder="请输入摘要" |
| 145 | - class="digest" maxlength="120"></el-input> | 143 | + class="digest" maxlength="120" style="float: right" /> |
| 146 | </div> | 144 | </div> |
| 147 | - <!-- 标题、作者、原文地址 --> | ||
| 148 | - <div class="input-tt">标题:</div> | ||
| 149 | - <el-input v-model="articlesAdd[isActiveAddNews].title" placeholder="请输入标题"></el-input> | ||
| 150 | - <div class="input-tt">作者:</div> | ||
| 151 | - <el-input v-model="articlesAdd[isActiveAddNews].author" placeholder="请输入作者"></el-input> | ||
| 152 | - <div class="input-tt">原文地址:</div> | ||
| 153 | - <el-input v-model="articlesAdd[isActiveAddNews].contentSourceUrl" placeholder="请输入原文地址"></el-input> | 145 | + <!--富文本编辑器组件--> |
| 146 | + <el-row> | ||
| 147 | + <wx-editor v-model="articlesAdd[isActiveAddNews].content" :account-id="this.uploadData.accountId" | ||
| 148 | + v-if="hackResetEditor"/> | ||
| 149 | + </el-row> | ||
| 150 | + <!-- 原文地址 --> | ||
| 154 | </div> | 151 | </div> |
| 155 | <div slot="footer" class="dialog-footer"> | 152 | <div slot="footer" class="dialog-footer"> |
| 156 | <el-button @click="dialogNewsVisible = false">取 消</el-button> | 153 | <el-button @click="dialogNewsVisible = false">取 消</el-button> |
| @@ -166,7 +163,7 @@ import WxEditor from '@/views/mp/components/wx-editor/WxEditor.vue'; | @@ -166,7 +163,7 @@ import WxEditor from '@/views/mp/components/wx-editor/WxEditor.vue'; | ||
| 166 | import WxNews from '@/views/mp/components/wx-news/main.vue'; | 163 | import WxNews from '@/views/mp/components/wx-news/main.vue'; |
| 167 | import WxMaterialSelect from '@/views/mp/components/wx-material-select/main.vue' | 164 | import WxMaterialSelect from '@/views/mp/components/wx-material-select/main.vue' |
| 168 | import { getAccessToken } from '@/utils/auth' | 165 | import { getAccessToken } from '@/utils/auth' |
| 169 | -import { createDraft, getDraftPage } from "@/api/mp/draft"; | 166 | +import {createDraft, getDraftPage, updateDraft} from "@/api/mp/draft"; |
| 170 | import { getSimpleAccounts } from "@/api/mp/account"; | 167 | import { getSimpleAccounts } from "@/api/mp/account"; |
| 171 | 168 | ||
| 172 | export default { | 169 | export default { |
| @@ -192,18 +189,12 @@ export default { | @@ -192,18 +189,12 @@ export default { | ||
| 192 | accountId: undefined, | 189 | accountId: undefined, |
| 193 | }, | 190 | }, |
| 194 | 191 | ||
| 195 | - page1: { | ||
| 196 | - total: 0, // 总页数 | ||
| 197 | - currentPage: 1, // 当前页数 | ||
| 198 | - pageSize: 10 // 每页显示多少条 | ||
| 199 | - }, | ||
| 200 | - | ||
| 201 | // ========== 文件上传 ========== | 192 | // ========== 文件上传 ========== |
| 202 | actionUrl: process.env.VUE_APP_BASE_API + "/admin-api/mp/material/upload-permanent", // 上传永久素材的地址 | 193 | actionUrl: process.env.VUE_APP_BASE_API + "/admin-api/mp/material/upload-permanent", // 上传永久素材的地址 |
| 203 | headers: { Authorization: "Bearer " + getAccessToken() }, // 设置上传的请求头部 | 194 | headers: { Authorization: "Bearer " + getAccessToken() }, // 设置上传的请求头部 |
| 204 | fileList: [], | 195 | fileList: [], |
| 205 | uploadData: { | 196 | uploadData: { |
| 206 | - "type": 'image', // TODO 芋艿:试试要不要换成 thumb | 197 | + "type": 'image', |
| 207 | // "accountId": 1, | 198 | // "accountId": 1, |
| 208 | }, | 199 | }, |
| 209 | 200 | ||
| @@ -213,8 +204,6 @@ export default { | @@ -213,8 +204,6 @@ export default { | ||
| 213 | articlesAdd: [], | 204 | articlesAdd: [], |
| 214 | isActiveAddNews: 0, | 205 | isActiveAddNews: 0, |
| 215 | dialogImageVisible: false, | 206 | dialogImageVisible: false, |
| 216 | - imageListData: [], | ||
| 217 | - tableLoading1: false, | ||
| 218 | operateMaterial: 'add', | 207 | operateMaterial: 'add', |
| 219 | articlesMediaId: '', | 208 | articlesMediaId: '', |
| 220 | hackResetEditor: false, | 209 | hackResetEditor: false, |
| @@ -236,6 +225,7 @@ export default { | @@ -236,6 +225,7 @@ export default { | ||
| 236 | }) | 225 | }) |
| 237 | }, | 226 | }, |
| 238 | methods: { | 227 | methods: { |
| 228 | + // ======================== 列表查询 ======================== | ||
| 239 | /** 设置账号编号 */ | 229 | /** 设置账号编号 */ |
| 240 | setAccountId(accountId) { | 230 | setAccountId(accountId) { |
| 241 | this.queryParams.accountId = accountId; | 231 | this.queryParams.accountId = accountId; |
| @@ -267,6 +257,10 @@ export default { | @@ -267,6 +257,10 @@ export default { | ||
| 267 | /** 搜索按钮操作 */ | 257 | /** 搜索按钮操作 */ |
| 268 | handleQuery() { | 258 | handleQuery() { |
| 269 | this.queryParams.pageNo = 1 | 259 | this.queryParams.pageNo = 1 |
| 260 | + // 默认选中第一个 | ||
| 261 | + if (this.queryParams.accountId) { | ||
| 262 | + this.setAccountId(this.queryParams.accountId) | ||
| 263 | + } | ||
| 270 | this.getList() | 264 | this.getList() |
| 271 | }, | 265 | }, |
| 272 | /** 重置按钮操作 */ | 266 | /** 重置按钮操作 */ |
| @@ -279,62 +273,24 @@ export default { | @@ -279,62 +273,24 @@ export default { | ||
| 279 | this.handleQuery() | 273 | this.handleQuery() |
| 280 | }, | 274 | }, |
| 281 | 275 | ||
| 282 | - delMaterial(item){ | ||
| 283 | - this.$confirm('此操作将永久删除该草稿, 是否继续?', '提示', { | ||
| 284 | - confirmButtonText: '确定', | ||
| 285 | - cancelButtonText: '取消', | ||
| 286 | - type: 'warning' | ||
| 287 | - }).then(() => { | ||
| 288 | - this.loading = true | ||
| 289 | - delObj({ | ||
| 290 | - id:item.mediaId | ||
| 291 | - }).then(response => { | ||
| 292 | - this.loading = false | ||
| 293 | - if(response.code == 200){ | ||
| 294 | - this.getList(this.queryParams) | ||
| 295 | - }else{ | ||
| 296 | - this.loading = false | ||
| 297 | - this.$message.error('删除出错:' + response.msg) | ||
| 298 | - } | ||
| 299 | - }).catch(() => { | ||
| 300 | - this.loading = false | ||
| 301 | - }) | ||
| 302 | - }) | ||
| 303 | - }, | ||
| 304 | - getPage1(){ | ||
| 305 | - this.tableLoading1 = true | ||
| 306 | - getPage1({ | ||
| 307 | - current: this.page1.currentPage, | ||
| 308 | - size: this.page1.pageSize, | ||
| 309 | - type:'image' | ||
| 310 | - }).then(response => { | ||
| 311 | - this.tableLoading1 = false | ||
| 312 | - this.imageListData = response.data.items | ||
| 313 | - this.page1.total = response.data.totalCount | ||
| 314 | - }).catch(() => { | ||
| 315 | - this.tableLoading1 = false | ||
| 316 | - }) | ||
| 317 | - }, | ||
| 318 | - openMaterial(){ | ||
| 319 | - this.imageListData = null | ||
| 320 | - this.page1.currentPage = 1 | ||
| 321 | - this.getPage1() | ||
| 322 | - this.dialogImageVisible = true | 276 | + // ======================== 新增/修改草稿 ======================== |
| 277 | + /** 新增按钮操作 */ | ||
| 278 | + handleAdd() { | ||
| 279 | + this.resetEditor(); | ||
| 280 | + this.reset(); | ||
| 281 | + // 打开表单,并设置初始化 | ||
| 282 | + this.operateMaterial = 'add' | ||
| 283 | + this.dialogNewsVisible = true | ||
| 323 | }, | 284 | }, |
| 324 | - dialogNewsClose(done){ | ||
| 325 | - this.$confirm('修改内容可能还未保存,确定关闭吗?', '提示', { | ||
| 326 | - confirmButtonText: '确定', | ||
| 327 | - cancelButtonText: '取消', | ||
| 328 | - type: 'warning' | ||
| 329 | - }).then(() => { | ||
| 330 | - this.hackResetEditor = false//销毁组件 | ||
| 331 | - this.$nextTick(() => { | ||
| 332 | - this.hackResetEditor = true//重建组件 | ||
| 333 | - }) | ||
| 334 | - this.isActiveAddNews = 0 | ||
| 335 | - done() | ||
| 336 | - }).catch(() => { | ||
| 337 | - }) | 285 | + /** 更新按钮操作 */ |
| 286 | + handleUpdate(item){ | ||
| 287 | + this.resetEditor(); | ||
| 288 | + this.reset(); | ||
| 289 | + this.articlesMediaId = item.mediaId | ||
| 290 | + this.articlesAdd = JSON.parse(JSON.stringify(item.content.newsItem)) | ||
| 291 | + // 打开表单,并设置初始化 | ||
| 292 | + this.operateMaterial = 'edit' | ||
| 293 | + this.dialogNewsVisible = true | ||
| 338 | }, | 294 | }, |
| 339 | /** 提交按钮 */ | 295 | /** 提交按钮 */ |
| 340 | submitForm() { | 296 | submitForm() { |
| @@ -347,59 +303,23 @@ export default { | @@ -347,59 +303,23 @@ export default { | ||
| 347 | }).finally(() => { | 303 | }).finally(() => { |
| 348 | this.addMaterialLoading = false | 304 | this.addMaterialLoading = false |
| 349 | }) | 305 | }) |
| 350 | - } | ||
| 351 | - if(this.operateMaterial == 'edit'){ | ||
| 352 | - putObj({ | ||
| 353 | - articles:this.articlesAdd, | ||
| 354 | - mediaId:this.articlesMediaId | ||
| 355 | - }).then(response => { | ||
| 356 | - this.addMaterialLoading = false | ||
| 357 | - this.dialogNewsVisible = false | ||
| 358 | - if(response.code == 200){ | ||
| 359 | - this.isActiveAddNews = 0 | ||
| 360 | - this.articlesAdd = [ | ||
| 361 | - { | ||
| 362 | - "title": '', | ||
| 363 | - "thumbMediaId": '', | ||
| 364 | - "author": '', | ||
| 365 | - "digest": '', | ||
| 366 | - "showCoverPic": '', | ||
| 367 | - "content": '', | ||
| 368 | - "contentSourceUrl": '', | ||
| 369 | - "needOpenComment":'', | ||
| 370 | - "onlyFansCanComment":'', | ||
| 371 | - "thumbUrl":'' | ||
| 372 | - } | ||
| 373 | - ] | ||
| 374 | - this.getList(this.queryParams) | ||
| 375 | - }else{ | ||
| 376 | - this.$message.error('修改图文出错:' + response.msg) | ||
| 377 | - } | ||
| 378 | - }).catch(() => { | 306 | + } else { |
| 307 | + updateDraft(this.queryParams.accountId, this.articlesMediaId, this.articlesAdd).then(response => { | ||
| 308 | + this.$modal.msgSuccess("更新成功"); | ||
| 309 | + this.dialogNewsVisible = false; | ||
| 310 | + this.getList() | ||
| 311 | + }).finally(() => { | ||
| 379 | this.addMaterialLoading = false | 312 | this.addMaterialLoading = false |
| 380 | }) | 313 | }) |
| 381 | } | 314 | } |
| 382 | }, | 315 | }, |
| 383 | - handleEditNews(item){ | ||
| 384 | - this.hackResetEditor = false // 销毁组件 | ||
| 385 | - this.$nextTick(() => { | ||
| 386 | - this.hackResetEditor = true // 重建组件 | ||
| 387 | - }) | ||
| 388 | - if (this.operateMaterial == 'add') { | ||
| 389 | - this.isActiveAddNews = 0 | ||
| 390 | - } | ||
| 391 | - this.operateMaterial = 'edit' | ||
| 392 | - this.articlesAdd = JSON.parse(JSON.stringify(item.content.newsItem)) | ||
| 393 | - this.articlesMediaId = item.mediaId | ||
| 394 | - this.dialogNewsVisible = true | ||
| 395 | - }, | ||
| 396 | - /** 新增按钮操作 */ | ||
| 397 | - handleAdd() { | ||
| 398 | - this.resetEditor(); | ||
| 399 | - this.reset(); | ||
| 400 | - // 打开表单,并设置初始化 | ||
| 401 | - this.operateMaterial = 'add' | ||
| 402 | - this.dialogNewsVisible = true | 316 | + // 关闭弹窗 |
| 317 | + dialogNewsClose(done) { | ||
| 318 | + this.$modal.confirm('修改内容可能还未保存,确定关闭吗?').then(() => { | ||
| 319 | + this.reset() | ||
| 320 | + this.resetEditor() | ||
| 321 | + done() | ||
| 322 | + }).catch(() => {}) | ||
| 403 | }, | 323 | }, |
| 404 | // 表单重置 | 324 | // 表单重置 |
| 405 | reset() { | 325 | reset() { |
| @@ -498,11 +418,20 @@ export default { | @@ -498,11 +418,20 @@ export default { | ||
| 498 | this.articlesAdd[this.isActiveAddNews].thumbMediaId = response.data.mediaId | 418 | this.articlesAdd[this.isActiveAddNews].thumbMediaId = response.data.mediaId |
| 499 | this.articlesAdd[this.isActiveAddNews].thumbUrl = response.data.url | 419 | this.articlesAdd[this.isActiveAddNews].thumbUrl = response.data.url |
| 500 | }, | 420 | }, |
| 501 | - selectMaterial(item){ | 421 | + // 选择 or 上传完素材,设置回草稿 |
| 422 | + selectMaterial(item) { | ||
| 502 | this.dialogImageVisible = false | 423 | this.dialogImageVisible = false |
| 503 | this.articlesAdd[this.isActiveAddNews].thumbMediaId = item.mediaId | 424 | this.articlesAdd[this.isActiveAddNews].thumbMediaId = item.mediaId |
| 504 | this.articlesAdd[this.isActiveAddNews].thumbUrl = item.url | 425 | this.articlesAdd[this.isActiveAddNews].thumbUrl = item.url |
| 505 | }, | 426 | }, |
| 427 | + // 打开素材选择 | ||
| 428 | + openMaterial() { | ||
| 429 | + this.dialogImageVisible = true | ||
| 430 | + try { | ||
| 431 | + this.$refs['materialSelect'].queryParams.accountId = this.queryParams.accountId // 强制设置下 accountId,避免二次查询不对 | ||
| 432 | + this.$refs['materialSelect'].handleQuery(); // 刷新列表,失败也无所谓 | ||
| 433 | + } catch (e) {} | ||
| 434 | + }, | ||
| 506 | 435 | ||
| 507 | // ======================== 草稿箱发布 ======================== | 436 | // ======================== 草稿箱发布 ======================== |
| 508 | handlePublishNews(item){ | 437 | handlePublishNews(item){ |
| @@ -521,248 +450,270 @@ export default { | @@ -521,248 +450,270 @@ export default { | ||
| 521 | }) | 450 | }) |
| 522 | }).catch(() => { | 451 | }).catch(() => { |
| 523 | }) | 452 | }) |
| 524 | - } | 453 | + }, |
| 454 | + delMaterial(item){ | ||
| 455 | + this.$confirm('此操作将永久删除该草稿, 是否继续?', '提示', { | ||
| 456 | + confirmButtonText: '确定', | ||
| 457 | + cancelButtonText: '取消', | ||
| 458 | + type: 'warning' | ||
| 459 | + }).then(() => { | ||
| 460 | + this.loading = true | ||
| 461 | + delObj({ | ||
| 462 | + id:item.mediaId | ||
| 463 | + }).then(response => { | ||
| 464 | + this.loading = false | ||
| 465 | + if(response.code == 200){ | ||
| 466 | + this.getList(this.queryParams) | ||
| 467 | + }else{ | ||
| 468 | + this.loading = false | ||
| 469 | + this.$message.error('删除出错:' + response.msg) | ||
| 470 | + } | ||
| 471 | + }).catch(() => { | ||
| 472 | + this.loading = false | ||
| 473 | + }) | ||
| 474 | + }) | ||
| 475 | + }, | ||
| 525 | } | 476 | } |
| 526 | } | 477 | } |
| 527 | </script> | 478 | </script> |
| 528 | 479 | ||
| 529 | <style lang="scss" scoped> | 480 | <style lang="scss" scoped> |
| 530 | - .pagination { | ||
| 531 | - float: right; | ||
| 532 | - margin-right: 25px; | ||
| 533 | - } | 481 | +.pagination { |
| 482 | + float: right; | ||
| 483 | + margin-right: 25px; | ||
| 484 | +} | ||
| 534 | 485 | ||
| 535 | - .add_but { | ||
| 536 | - padding: 10px; | ||
| 537 | - } | 486 | +.add_but { |
| 487 | + padding: 10px; | ||
| 488 | +} | ||
| 538 | 489 | ||
| 539 | - .ope-row { | ||
| 540 | - margin-top: 5px; | ||
| 541 | - text-align: center; | ||
| 542 | - border-top: 1px solid #eaeaea; | ||
| 543 | - padding-top: 5px; | ||
| 544 | - } | 490 | +.ope-row { |
| 491 | + margin-top: 5px; | ||
| 492 | + text-align: center; | ||
| 493 | + border-top: 1px solid #eaeaea; | ||
| 494 | + padding-top: 5px; | ||
| 495 | +} | ||
| 545 | 496 | ||
| 546 | - .item-name { | ||
| 547 | - font-size: 12px; | ||
| 548 | - overflow: hidden; | ||
| 549 | - text-overflow: ellipsis; | ||
| 550 | - white-space: nowrap; | ||
| 551 | - text-align: center; | ||
| 552 | - } | 497 | +.item-name { |
| 498 | + font-size: 12px; | ||
| 499 | + overflow: hidden; | ||
| 500 | + text-overflow: ellipsis; | ||
| 501 | + white-space: nowrap; | ||
| 502 | + text-align: center; | ||
| 503 | +} | ||
| 553 | 504 | ||
| 554 | - .el-upload__tip { | ||
| 555 | - margin-left: 5px; | ||
| 556 | - } | 505 | +.el-upload__tip { |
| 506 | + margin-left: 5px; | ||
| 507 | +} | ||
| 557 | 508 | ||
| 558 | - /*新增图文*/ | ||
| 559 | - .left { | ||
| 560 | - display: inline-block; | ||
| 561 | - width: 35%; | ||
| 562 | - vertical-align: top; | ||
| 563 | - margin-top: 200px; | ||
| 564 | - } | 509 | +/*新增图文*/ |
| 510 | +.left { | ||
| 511 | + display: inline-block; | ||
| 512 | + width: 35%; | ||
| 513 | + vertical-align: top; | ||
| 514 | + margin-top: 200px; | ||
| 515 | +} | ||
| 565 | 516 | ||
| 566 | - .right { | ||
| 567 | - display: inline-block; | ||
| 568 | - width: 60%; | ||
| 569 | - margin-top: -40px; | ||
| 570 | - } | 517 | +.right { |
| 518 | + display: inline-block; | ||
| 519 | + width: 60%; | ||
| 520 | + margin-top: -40px; | ||
| 521 | +} | ||
| 571 | 522 | ||
| 572 | - .avatar-uploader { | ||
| 573 | - width: 20%; | ||
| 574 | - display: inline-block; | ||
| 575 | - } | 523 | +.avatar-uploader { |
| 524 | + width: 20%; | ||
| 525 | + display: inline-block; | ||
| 526 | +} | ||
| 576 | 527 | ||
| 577 | - .avatar-uploader .el-upload { | ||
| 578 | - border-radius: 6px; | ||
| 579 | - cursor: pointer; | ||
| 580 | - position: relative; | ||
| 581 | - overflow: hidden; | ||
| 582 | - text-align: unset !important; | ||
| 583 | - } | 528 | +.avatar-uploader .el-upload { |
| 529 | + border-radius: 6px; | ||
| 530 | + cursor: pointer; | ||
| 531 | + position: relative; | ||
| 532 | + overflow: hidden; | ||
| 533 | + text-align: unset !important; | ||
| 534 | +} | ||
| 584 | 535 | ||
| 585 | - .avatar-uploader .el-upload:hover { | ||
| 586 | - border-color: #165dff; | ||
| 587 | - } | 536 | +.avatar-uploader .el-upload:hover { |
| 537 | + border-color: #165dff; | ||
| 538 | +} | ||
| 588 | 539 | ||
| 589 | - .avatar-uploader-icon { | ||
| 590 | - border: 1px solid #d9d9d9; | ||
| 591 | - font-size: 28px; | ||
| 592 | - color: #8c939d; | ||
| 593 | - width: 120px; | ||
| 594 | - height: 120px; | ||
| 595 | - line-height: 120px; | ||
| 596 | - text-align: center; | ||
| 597 | - } | 540 | +.avatar-uploader-icon { |
| 541 | + border: 1px solid #d9d9d9; | ||
| 542 | + font-size: 28px; | ||
| 543 | + color: #8c939d; | ||
| 544 | + width: 120px; | ||
| 545 | + height: 120px; | ||
| 546 | + line-height: 120px; | ||
| 547 | + text-align: center; | ||
| 548 | +} | ||
| 598 | 549 | ||
| 599 | - .avatar { | ||
| 600 | - width: 230px; | ||
| 601 | - height: 120px; | ||
| 602 | - } | 550 | +.avatar { |
| 551 | + width: 230px; | ||
| 552 | + height: 120px; | ||
| 553 | +} | ||
| 603 | 554 | ||
| 604 | - .avatar1 { | ||
| 605 | - width: 120px; | ||
| 606 | - height: 120px; | ||
| 607 | - } | 555 | +.avatar1 { |
| 556 | + width: 120px; | ||
| 557 | + height: 120px; | ||
| 558 | +} | ||
| 608 | 559 | ||
| 609 | - .digest { | ||
| 610 | - width: 60%; | ||
| 611 | - display: inline-block; | ||
| 612 | - vertical-align: top; | ||
| 613 | - } | 560 | +.digest { |
| 561 | + width: 60%; | ||
| 562 | + display: inline-block; | ||
| 563 | + vertical-align: top; | ||
| 564 | +} | ||
| 614 | 565 | ||
| 615 | - /*新增图文*/ | ||
| 616 | - /*瀑布流样式*/ | ||
| 617 | - .waterfall { | ||
| 618 | - width: 100%; | ||
| 619 | - column-gap: 10px; | ||
| 620 | - column-count: 5; | ||
| 621 | - margin: 0 auto; | ||
| 622 | - } | 566 | +/*新增图文*/ |
| 567 | +/*瀑布流样式*/ | ||
| 568 | +.waterfall { | ||
| 569 | + width: 100%; | ||
| 570 | + column-gap: 10px; | ||
| 571 | + column-count: 5; | ||
| 572 | + margin: 0 auto; | ||
| 573 | +} | ||
| 623 | 574 | ||
| 624 | - .waterfall-item { | ||
| 625 | - padding: 10px; | ||
| 626 | - margin-bottom: 10px; | ||
| 627 | - break-inside: avoid; | ||
| 628 | - border: 1px solid #eaeaea; | ||
| 629 | - } | 575 | +.waterfall-item { |
| 576 | + padding: 10px; | ||
| 577 | + margin-bottom: 10px; | ||
| 578 | + break-inside: avoid; | ||
| 579 | + border: 1px solid #eaeaea; | ||
| 580 | +} | ||
| 630 | 581 | ||
| 582 | +p { | ||
| 583 | + line-height: 30px; | ||
| 584 | +} | ||
| 585 | + | ||
| 586 | +@media (min-width: 992px) and (max-width: 1300px) { | ||
| 587 | + .waterfall { | ||
| 588 | + column-count: 3; | ||
| 589 | + } | ||
| 631 | p { | 590 | p { |
| 632 | - line-height: 30px; | 591 | + color: red; |
| 633 | } | 592 | } |
| 593 | +} | ||
| 634 | 594 | ||
| 635 | - @media (min-width: 992px) and (max-width: 1300px) { | ||
| 636 | - .waterfall { | ||
| 637 | - column-count: 3; | ||
| 638 | - } | ||
| 639 | - p { | ||
| 640 | - color: red; | ||
| 641 | - } | 595 | +@media (min-width: 768px) and (max-width: 991px) { |
| 596 | + .waterfall { | ||
| 597 | + column-count: 2; | ||
| 642 | } | 598 | } |
| 643 | - | ||
| 644 | - @media (min-width: 768px) and (max-width: 991px) { | ||
| 645 | - .waterfall { | ||
| 646 | - column-count: 2; | ||
| 647 | - } | ||
| 648 | - p { | ||
| 649 | - color: orange; | ||
| 650 | - } | 599 | + p { |
| 600 | + color: orange; | ||
| 651 | } | 601 | } |
| 602 | +} | ||
| 652 | 603 | ||
| 653 | - @media (max-width: 767px) { | ||
| 654 | - .waterfall { | ||
| 655 | - column-count: 1; | ||
| 656 | - } | 604 | +@media (max-width: 767px) { |
| 605 | + .waterfall { | ||
| 606 | + column-count: 1; | ||
| 657 | } | 607 | } |
| 608 | +} | ||
| 658 | 609 | ||
| 659 | - /*瀑布流样式*/ | ||
| 660 | - .news-main { | ||
| 661 | - background-color: #FFFFFF; | ||
| 662 | - width: 100%; | ||
| 663 | - margin: auto; | ||
| 664 | - height: 120px; | ||
| 665 | - } | 610 | +/*瀑布流样式*/ |
| 611 | +.news-main { | ||
| 612 | + background-color: #FFFFFF; | ||
| 613 | + width: 100%; | ||
| 614 | + margin: auto; | ||
| 615 | + height: 120px; | ||
| 616 | +} | ||
| 666 | 617 | ||
| 667 | - .news-content { | ||
| 668 | - background-color: #acadae; | ||
| 669 | - width: 100%; | ||
| 670 | - height: 120px; | ||
| 671 | - position: relative; | ||
| 672 | - } | 618 | +.news-content { |
| 619 | + background-color: #acadae; | ||
| 620 | + width: 100%; | ||
| 621 | + height: 120px; | ||
| 622 | + position: relative; | ||
| 623 | +} | ||
| 673 | 624 | ||
| 674 | - .news-content-title { | ||
| 675 | - display: inline-block; | ||
| 676 | - font-size: 15px; | ||
| 677 | - color: #FFFFFF; | ||
| 678 | - position: absolute; | ||
| 679 | - left: 0px; | ||
| 680 | - bottom: 0px; | ||
| 681 | - background-color: black; | ||
| 682 | - width: 98%; | ||
| 683 | - padding: 1%; | ||
| 684 | - opacity: 0.65; | ||
| 685 | - overflow: hidden; | ||
| 686 | - text-overflow: ellipsis; | ||
| 687 | - white-space: nowrap; | ||
| 688 | - height: 25px; | ||
| 689 | - } | 625 | +.news-content-title { |
| 626 | + display: inline-block; | ||
| 627 | + font-size: 15px; | ||
| 628 | + color: #FFFFFF; | ||
| 629 | + position: absolute; | ||
| 630 | + left: 0px; | ||
| 631 | + bottom: 0px; | ||
| 632 | + background-color: black; | ||
| 633 | + width: 98%; | ||
| 634 | + padding: 1%; | ||
| 635 | + opacity: 0.65; | ||
| 636 | + overflow: hidden; | ||
| 637 | + text-overflow: ellipsis; | ||
| 638 | + white-space: nowrap; | ||
| 639 | + height: 25px; | ||
| 640 | +} | ||
| 690 | 641 | ||
| 691 | - .news-main-item { | ||
| 692 | - background-color: #FFFFFF; | ||
| 693 | - padding: 5px 0px; | ||
| 694 | - border-top: 1px solid #eaeaea; | ||
| 695 | - width: 100%; | ||
| 696 | - margin: auto; | ||
| 697 | - } | 642 | +.news-main-item { |
| 643 | + background-color: #FFFFFF; | ||
| 644 | + padding: 5px 0px; | ||
| 645 | + border-top: 1px solid #eaeaea; | ||
| 646 | + width: 100%; | ||
| 647 | + margin: auto; | ||
| 648 | +} | ||
| 698 | 649 | ||
| 699 | - .news-content-item { | ||
| 700 | - position: relative; | ||
| 701 | - margin-left: -3px | ||
| 702 | - } | 650 | +.news-content-item { |
| 651 | + position: relative; | ||
| 652 | + margin-left: -3px | ||
| 653 | +} | ||
| 703 | 654 | ||
| 704 | - .news-content-item-title { | ||
| 705 | - display: inline-block; | ||
| 706 | - font-size: 12px; | ||
| 707 | - width: 70%; | ||
| 708 | - } | 655 | +.news-content-item-title { |
| 656 | + display: inline-block; | ||
| 657 | + font-size: 12px; | ||
| 658 | + width: 70%; | ||
| 659 | +} | ||
| 709 | 660 | ||
| 710 | - .news-content-item-img { | ||
| 711 | - display: inline-block; | ||
| 712 | - width: 25%; | ||
| 713 | - background-color: #acadae | ||
| 714 | - } | 661 | +.news-content-item-img { |
| 662 | + display: inline-block; | ||
| 663 | + width: 25%; | ||
| 664 | + background-color: #acadae | ||
| 665 | +} | ||
| 715 | 666 | ||
| 716 | - .input-tt { | ||
| 717 | - padding: 5px; | ||
| 718 | - } | 667 | +.input-tt { |
| 668 | + padding: 5px; | ||
| 669 | +} | ||
| 719 | 670 | ||
| 720 | - .activeAddNews { | ||
| 721 | - border: 5px solid #2bb673; | ||
| 722 | - } | 671 | +.activeAddNews { |
| 672 | + border: 5px solid #2bb673; | ||
| 673 | +} | ||
| 723 | 674 | ||
| 724 | - .news-main-plus { | ||
| 725 | - width: 280px; | ||
| 726 | - text-align: center; | ||
| 727 | - margin: auto; | ||
| 728 | - height: 50px; | ||
| 729 | - } | 675 | +.news-main-plus { |
| 676 | + width: 280px; | ||
| 677 | + text-align: center; | ||
| 678 | + margin: auto; | ||
| 679 | + height: 50px; | ||
| 680 | +} | ||
| 730 | 681 | ||
| 731 | - .icon-plus { | ||
| 732 | - margin: 10px; | ||
| 733 | - font-size: 25px; | ||
| 734 | - } | 682 | +.icon-plus { |
| 683 | + margin: 10px; | ||
| 684 | + font-size: 25px; | ||
| 685 | +} | ||
| 735 | 686 | ||
| 736 | - .select-item { | ||
| 737 | - width: 60%; | ||
| 738 | - padding: 10px; | ||
| 739 | - margin: 0 auto 10px auto; | ||
| 740 | - border: 1px solid #eaeaea; | ||
| 741 | - } | 687 | +.select-item { |
| 688 | + width: 60%; | ||
| 689 | + padding: 10px; | ||
| 690 | + margin: 0 auto 10px auto; | ||
| 691 | + border: 1px solid #eaeaea; | ||
| 692 | +} | ||
| 742 | 693 | ||
| 743 | - .father .child { | ||
| 744 | - display: none; | ||
| 745 | - text-align: center; | ||
| 746 | - position: relative; | ||
| 747 | - bottom: 25px; | ||
| 748 | - } | 694 | +.father .child { |
| 695 | + display: none; | ||
| 696 | + text-align: center; | ||
| 697 | + position: relative; | ||
| 698 | + bottom: 25px; | ||
| 699 | +} | ||
| 749 | 700 | ||
| 750 | - .father:hover .child { | ||
| 751 | - display: block; | ||
| 752 | - } | 701 | +.father:hover .child { |
| 702 | + display: block; | ||
| 703 | +} | ||
| 753 | 704 | ||
| 754 | - .thumb-div { | ||
| 755 | - display: inline-block; | ||
| 756 | - width: 30%; | ||
| 757 | - text-align: center; | ||
| 758 | - } | 705 | +.thumb-div { |
| 706 | + display: inline-block; | ||
| 707 | + width: 30%; | ||
| 708 | + text-align: center; | ||
| 709 | +} | ||
| 759 | 710 | ||
| 760 | - .thumb-but { | ||
| 761 | - margin: 5px; | ||
| 762 | - } | 711 | +.thumb-but { |
| 712 | + margin: 5px; | ||
| 713 | +} | ||
| 763 | 714 | ||
| 764 | - .material-img { | ||
| 765 | - width: 100%; | ||
| 766 | - height: 100%; | ||
| 767 | - } | 715 | +.material-img { |
| 716 | + width: 100%; | ||
| 717 | + height: 100%; | ||
| 718 | +} | ||
| 768 | </style> | 719 | </style> |