123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643 |
- <template>
- <div style="width: 100%">
- <el-main>
- <div class="tou">发现管理</div>
- <div>
- <div class="bbox">
- <el-button size="small" type="primary" style="" @click="insertPop"
- >添加文章</el-button
- >
- </div>
- <el-table
- ref="table"
- v-loading="isLoading"
- :data="tableData"
- stripe
- border
- :header-cell-style="{ background: '#f1f1f1', 'text-align': 'center' }"
- :cell-style="{ 'text-align': 'center' }"
- style="width: 100%; margin-top: 15px"
- :height="tableHeight"
- >
- <el-table-column
- prop="title"
- label="文章标题"
- min-width="35"
- :show-overflow-tooltip="true"
- >
- </el-table-column>
- <el-table-column prop="time" label="创建时间" min-width="15">
- </el-table-column>
- <el-table-column prop="do" label="操作" min-width="20">
- <template slot-scope="scope">
- <div class="pb_buttonBox">
- <el-button
- size="mini"
- type="primary"
- @click="getDetail(scope.row.id)"
- >查看详情</el-button
- >
- <el-button
- size="mini"
- type="primary"
- @click="updatePop(scope.row.id, scope.$index)"
- >修改</el-button
- >
- <el-button
- size="mini"
- type="primary"
- @click="deleteFind(scope.row.id)"
- >删除</el-button
- >
- </div>
- </template>
- </el-table-column>
- </el-table>
- </div>
- <div class="student_page">
- <el-pagination
- background
- layout="prev, pager, next"
- :page-size="10"
- :total="total"
- @current-change="handleCurrentChange"
- >
- </el-pagination>
- </div>
- </el-main>
- <el-dialog
- title="添加文章"
- :visible.sync="dialogVisible1"
- width="500px"
- :before-close="handleClose"
- class="dialog_diyA dialog_diy"
- center
- >
- <div>
- <div class="tian1">
- <span>标题</span>
- <el-input
- v-model="contentTitle"
- style="width: 250px; margin: 15px 0px"
- placeholder="请输入文章标题"
- ></el-input>
- </div>
- <div class="tian1">
- <span>文章海报</span>
- <!-- :on-success="handle_success" -->
- <!-- :before-upload="beforeUpload1" -->
- <el-upload
- action="#"
- list-type="picture"
- style="margin: 15px 0px"
- v-loading="uploadLoading1"
- :http-request="beforeUpload1"
- ref="upload1"
- :on-preview="handlePictureCardPreview"
- :on-remove="handle_remove1"
- :show-file-list="true"
- accept="image/*"
- :file-list="fileList1"
- :limit="1"
- >
- <!-- <i class="el-icon-plus"></i> -->
- <el-button size="small" type="primary">点击上传</el-button>
- </el-upload>
- </div>
- <div class="tian1">
- <span>文章内容</span>
- <!-- <el-input
- type="textarea"
- rows="10"
- v-model="input"
- style="width: 100%; margin: 15px 0px"
- placeholder="请输入文章内容"
- ></el-input> -->
- <editor-bar
- v-model="detail"
- :isClear="isClear"
- @change="change"
- ></editor-bar>
- </div>
- </div>
- <span slot="footer" class="dialog-footer">
- <el-button @click="dialogVisible1 = false">取 消</el-button>
- <el-button type="primary" @click="addContent">确 定</el-button>
- </span>
- </el-dialog>
- <el-dialog
- title="修改文章"
- :visible.sync="dialogVisible3"
- width="500px"
- :before-close="handleClose"
- class="dialog_diyA dialog_diy"
- center
- >
- <div>
- <div class="tian1">
- <span>标题</span>
- <el-input
- v-model="updateJson.title"
- style="width: 250px; margin: 15px 0px"
- placeholder="请输入修改的文章标题"
- ></el-input>
- </div>
- <div class="tian1">
- <span>文章海报</span>
- <!-- :on-success="handle_success" -->
- <!-- :before-upload="beforeUpload1" -->
- <el-upload
- action="#"
- list-type="picture"
- style="margin: 15px 0px"
- v-loading="uploadLoading1"
- :http-request="beforeUpload1"
- ref="upload1"
- :on-preview="handlePictureCardPreview"
- :on-remove="handle_remove1"
- :show-file-list="true"
- accept="image/*"
- :file-list="fileList1"
- :limit="1"
- >
- <!-- <i class="el-icon-plus"></i> -->
- <el-button size="small" type="primary">点击上传</el-button>
- </el-upload>
- </div>
- <div class="tian1">
- <span>文章内容</span>
- <!-- <el-input
- type="textarea"
- rows="10"
- v-model="input"
- style="width: 100%; margin: 15px 0px"
- placeholder="请输入文章内容"
- ></el-input> -->
- <editor-bar
- v-model="updateJson.content"
- :isClear="isClear"
- @change="change"
- ></editor-bar>
- </div>
- </div>
- <span slot="footer" class="dialog-footer">
- <el-button @click="dialogVisible3 = false">取 消</el-button>
- <el-button type="primary" @click="updateDetail">确 定</el-button>
- </span>
- </el-dialog>
- <el-dialog
- title="查看详情"
- :visible.sync="dialogVisible2"
- width="50%"
- :before-close="handleClose"
- class="dialog_diyA dialog_diyH dialog_diy"
- height="500px"
- center
- >
- <div>
- <div class="head">
- <span>{{ homeDeatail.title }}</span>
- <span class="name">{{ homeDeatail.time }}</span>
- </div>
- <div class="cont" v-html="homeDeatail.content"></div>
- </div>
- <span slot="footer" class="dialog-footer">
- <el-button type="primary" @click="dialogVisible2 = false"
- >关闭</el-button
- >
- </span>
- </el-dialog>
- <el-dialog :visible.sync="ImageVisible1" size="tiny">
- <img width="100%" :src="dialogImageUrl" alt="" />
- </el-dialog>
- </div>
- </template>
- <script>
- import EditorBar from "../../components/tools/wangEnduit";
- import "../../common/aws-sdk-2.235.1.min";
- export default {
- components: { EditorBar },
- data() {
- return {
- isClear: false,
- detail: "",
- dialogVisible1: false,
- dialogVisible2: false,
- tableData: [],
- uploadLoading1: false,
- fileList1: [],
- ImageVisible1: false,
- dialogImageUrl: "",
- now: "",
- contentTitle: "",
- isLoading: false,
- total: 0,
- page: 1,
- tableHeight: 500,
- homeDeatail: [],
- updateJson: {},
- dialogVisible3: false,
- updateId: "",
- };
- },
- methods: {
- time() {
- if (!this.now) {
- this.now = new Date().getTime();
- return true;
- } else {
- let time = new Date().getTime();
- if (time - this.now > 3000) {
- this.now = time;
- return true;
- } else {
- return false;
- }
- }
- },
- init() {
- this.detail = "";
- this.fileList1 = [];
- this.contentTitle = "";
- this.updateJson = {};
- this.updateId = "";
- },
- insertPop() {
- this.init();
- this.dialogVisible1 = true;
- },
- handlePictureCardPreview(file) {
- this.dialogImageUrl = file.url;
- this.ImageVisible1 = true;
- },
- handle_remove1(file, fileList) {
- var _tmp = this.fileList1;
- for (var i = 0, len = _tmp.length; i < len; i++) {
- if (_tmp[i].uid == file.uid) {
- _tmp.splice(i, 1);
- break;
- }
- this.fileList1 = _tmp;
- }
- },
- beforeUpload1(data) {
- this.$refs.upload1.uploadFiles;
- this.uploadLoading1 = true;
- var file = data.file;
- var credentials = {
- accessKeyId: "AKIATLPEDU37QV5CHLMH",
- secretAccessKey: "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",
- }; //秘钥形式的登录上传
- window.AWS.config.update(credentials);
- window.AWS.config.region = "cn-northwest-1"; //设置区域
- var bucket = new window.AWS.S3({ params: { Bucket: "ccrb" } }); //选择桶
- var _this = this;
- if (file) {
- var params = {
- Key:
- file.name.split(".")[0] +
- new Date().getTime() +
- "." +
- file.name.split(".")[1],
- ContentType: file.type,
- Body: file,
- "Access-Control-Allow-Credentials": "*",
- ACL: "public-read",
- }; //key可以设置为桶的相抵路径,Body为文件, ACL最好要设置
- var options = {
- partSize: 2048 * 1024 * 1024,
- queueSize: 2,
- leavePartsOnError: true,
- };
- bucket
- .upload(params, options)
- .on("httpUploadProgress", function (evt) {
- //这里可以写进度条
- // console.log("Uploaded : " + parseInt((evt.loaded * 80) / evt.total) + '%');
- })
- .send(function (err, data) {
- _this.uploadLoading1 = false;
- if (err) {
- var a = _this.$refs.upload1.uploadFiles;
- a.splice(a.length - 1, a.length);
- _this.$message.error("上传失败");
- } else {
- //上传成功处理
- _this.fileList1.push({
- name: file.name,
- url: data.Location,
- uid: file.uid,
- });
- console.log(data.Location);
- }
- });
- }
- },
- change(val) {
- console.log(val);
- },
- //添加文章
- addContent() {
- if (this.contentTitle === "") {
- this.$message.error("请输入文章标题");
- return;
- } else if (this.detail === "") {
- this.$message.error("请输入文章内容");
- return;
- }
- console.log(this.detail);
- if (this.time()) {
- let params = [
- {
- p: this.fileList1.length ? this.fileList1[0].url : "",
- t: this.contentTitle,
- c: this.detail.replace(/%/g, "%25"),
- },
- ];
- this.ajax
- .post(this.$store.state.api + "addFind", params)
- .then((res) => {
- this.$message({
- message: "添加成功",
- type: "success",
- });
- this.init();
- this.getFind();
- this.dialogVisible1 = false;
- })
- .catch((err) => {
- this.$message.error("添加失败");
- console.error(err);
- });
- }
- },
- handleClose(done) {
- done();
- },
- handleCurrentChange(val) {
- // console.log(`当前页: ${val}`);
- this.page = val;
- this.getFind();
- },
- //查询文章
- getFind() {
- this.isLoading = true;
- let params = { pid: this.pid, page: this.page };
- this.ajax
- .get(this.$store.state.api + "getFindAdmin", params)
- .then((res) => {
- this.isLoading = false;
- this.total = res.data[0].length > 0 ? res.data[0][0].num : 0;
- this.tableData = res.data[0];
- })
- .catch((err) => {
- this.isLoading = false;
- console.error(err);
- });
- },
- changeType() {
- this.page = 1;
- this.getFind();
- },
- //查看文章详情
- getDetail(id) {
- let params = { id: id };
- this.ajax
- .get(this.$store.state.api + "getFindByid", params)
- .then((res) => {
- this.dialogVisible2 = true;
- this.homeDeatail = res.data[0][0];
- })
- .catch((err) => {
- console.error(err);
- });
- },
- //删除文章
- deleteFind(id) {
- let params = [{ id: id }];
- this.$confirm("确定删除此发现文章吗?", "提示", {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning",
- })
- .then(() => {
- this.ajax
- .post(this.$store.state.api + "deleteFind", params)
- .then((res) => {
- this.$message({
- message: "删除成功",
- type: "success",
- });
- if (this.page != 1 && this.tableData.length == 1) {
- this.page--;
- }
- this.getFind();
- })
- .catch((err) => {
- this.$message.error("删除失败");
- console.error(err);
- });
- })
- .catch(() => {});
- },
- changeHeight() {
- this.tableHeight =
- window.innerHeight - this.$refs.table.$el.offsetTop - 200;
- if (this.tableHeight <= 530) {
- this.tableHeight = 530;
- }
- // 监听窗口大小变化
- let self = this;
- window.onresize = function () {
- self.tableHeight =
- window.innerHeight - self.$refs.table.$el.offsetTop - 200;
- if (self.tableHeight <= 530) {
- self.tableHeight = 530;
- }
- };
- // this.$refs.table.$el.offsetTop:表格距离浏览器的高度 //200表示你想要调整的表格距离底部的高度(你可以自己随意调整),因为我们一般都有放分页组件的,所以需要给它留一个高度
- },
- //修改
- updatePop(id, index) {
- this.init();
- this.dialogVisible3 = true;
- this.updateJson = this.tableData[index];
- this.fileList1 = [];
- if (this.tableData[index].poster != "") {
- this.fileList1.push({
- name: this.tableData[index].poster
- .split("//")[1]
- .split("/")[1]
- .split(".")[0],
- url: this.tableData[index].poster,
- });
- }
- this.updateId = id;
- },
- updateDetail() {
- if (this.updateJson.title === "") {
- this.$message.error("请输入文章标题");
- return;
- } else if (this.updateJson.content === "") {
- this.$message.error("请输入文章内容");
- return;
- }
- if (this.time()) {
- let params = [
- {
- p: this.fileList1.length ? this.fileList1[0].url : "",
- t: this.updateJson.title,
- c: this.updateJson.content.replace(/%/g, "%25"),
- id: this.updateId,
- },
- ];
- this.ajax
- .post(this.$store.state.api + "updateFind", params)
- .then((res) => {
- this.$message({
- message: "修改成功",
- type: "success",
- });
- this.init();
- this.getFind();
- this.dialogVisible3 = false;
- })
- .catch((err) => {
- this.$message.error("修改失败");
- console.error(err);
- });
- }
- },
- },
- mounted() {
- this.$nextTick(function () {
- this.page = 1;
- this.getFind();
- this.changeHeight();
- });
- },
- };
- </script>
- <style scoped>
- .tou {
- border-bottom: 1px solid #c9c9c9;
- height: 50px;
- font-size: 30px;
- }
- .tian1 {
- margin-top: 15px;
- }
- .tian1 span {
- display: block;
- }
- .tutor_type {
- display: flex;
- align-items: center;
- margin: 15px 0px;
- }
- .head {
- font-size: 20px;
- border-bottom: 1px solid;
- /* height: 35px; */
- display: flex;
- align-items: center;
- padding-bottom: 10px;
- justify-content: space-between;
- }
- .name {
- float: right;
- /* margin-top: -30px; */
- font-size: 14px;
- width: 200px;
- }
- .cont {
- /* font-size: 16px; */
- line-height: 34px;
- text-indent: 2em;
- }
- .dialog_diy >>> .el-dialog__header {
- background: #3d67bc !important;
- padding: 15px 20px;
- }
- .dialog_diy >>> .el-dialog__title {
- color: #fff;
- }
- .dialog_diy >>> .el-dialog__headerbtn {
- top: 19px;
- }
- .dialog_diy >>> .el-dialog__headerbtn .el-dialog__close {
- color: #fff;
- }
- .dialog_diy >>> .el-dialog__headerbtn .el-dialog__close:hover {
- color: #fff;
- }
- .student_page {
- margin-top: 15px;
- }
- .dialog_diyA >>> .el-dialog {
- min-width: 800px;
- }
- .dialog_diyH >>> .el-dialog__body {
- height: 750px;
- overflow: auto;
- }
- .bbox {
- display: flex;
- justify-content: flex-end;
- margin-top: 15px;
- align-items: center;
- }
- /* table 样式 */
- .cont >>> table {
- border-top: 1px solid #ccc;
- border-left: 1px solid #ccc;
- }
- .cont >>> table td,
- .cont >>> table th {
- border-bottom: 1px solid #ccc;
- border-right: 1px solid #ccc;
- padding: 3px 5px;
- }
- .cont >>> table th {
- border-bottom: 2px solid #ccc;
- text-align: center;
- }
- /* blockquote 样式 */
- .cont >>> blockquote {
- display: block;
- border-left: 8px solid #d0e5f2;
- padding: 5px 10px;
- margin: 10px 0;
- line-height: 1.4;
- font-size: 100%;
- background-color: #f1f1f1;
- }
- /* code 样式 */
- .cont >>> code {
- display: inline-block;
- *display: inline;
- *zoom: 1;
- background-color: #f1f1f1;
- border-radius: 3px;
- padding: 3px 5px;
- margin: 0 3px;
- }
- .cont >>> pre code {
- display: block;
- }
- /* ul ol 样式 */
- .cont >>> ul,
- ol {
- margin: 10px 0 10px 20px;
- }
- </style>
|