addChampionSay.vue 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  1. <style lang="scss">
  2. .content {
  3. .avatar-uploader .el-upload {
  4. border: 1px dashed #d9d9d9;
  5. border-radius: 6px;
  6. cursor: pointer;
  7. position: relative;
  8. overflow: hidden;
  9. }
  10. .avatar-uploader .el-upload:hover {
  11. border-color: #409eff;
  12. }
  13. .avatar-uploader-icon {
  14. font-size: 28px;
  15. color: #8c939d;
  16. width: 200px;
  17. height: 120px;
  18. line-height: 120px;
  19. text-align: center;
  20. }
  21. .avatar {
  22. width: 200px;
  23. height: 120px;
  24. display: block;
  25. }
  26. height: 10vh!important;
  27. .top{
  28. margin-left: 20px;
  29. }
  30. .save{
  31. margin-left: 50px;
  32. margin-top: 20px;
  33. }
  34. .detail{
  35. margin-bottom: 100px;
  36. width: 70%;
  37. }
  38. }
  39. </style>
  40. <template>
  41. <section class="content">
  42. <h4>新增文章</h4>
  43. <el-divider></el-divider>
  44. <el-form>
  45. <el-row>
  46. <el-col :span="8">
  47. <el-form-item label="标题">
  48. <el-input placeholder="标题" v-model="form.name"></el-input>
  49. </el-form-item>
  50. </el-col>
  51. <el-col :span="3">
  52. <el-form-item label="分类" class="top">
  53. <el-select v-model="form.category" placeholder="">
  54. <el-option
  55. v-for="item in categoryList"
  56. :key="item.value"
  57. :label="item.label"
  58. :value="item.value">
  59. </el-option>
  60. </el-select>
  61. </el-form-item>
  62. </el-col>
  63. <el-col :span="3" class="top">
  64. <el-form-item label="置顶">
  65. <el-select v-model="form.isbanner" placeholder="">
  66. <el-option
  67. v-for="item in bannerList"
  68. :key="item.value"
  69. :label="item.label"
  70. :value="item.value">
  71. </el-option>
  72. </el-select>
  73. </el-form-item>
  74. </el-col>
  75. <el-col :span="3" class="top">
  76. <el-form-item label="状态" prop="status">
  77. <el-select v-model="form.status" placeholder="请选择状态">
  78. <el-option key="1" label="编辑中" :value="1"></el-option>
  79. <el-option key="2" label="上线" :value="2"></el-option>
  80. <el-option key="-1" label="下线" :value="-1"></el-option>
  81. </el-select>
  82. </el-form-item>
  83. </el-col>
  84. <el-col :span="4" class="save">
  85. <el-form-item label="">
  86. <el-button type="primary" @click="save">保存</el-button>
  87. </el-form-item>
  88. </el-col>
  89. </el-row>
  90. <el-form-item label="封面图">
  91. <el-upload
  92. class="avatar-uploader"
  93. action="/api/admin/uploadfile"
  94. :show-file-list="false"
  95. :on-success="handleAvatarSuccess"
  96. :before-upload="beforeAvatarUpload"
  97. >
  98. <img v-if="form.img" :src="form.img" class="avatar" />
  99. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  100. </el-upload>
  101. </el-form-item>
  102. <el-form-item label="文章抓取">
  103. <el-input placeholder="URL地址" v-model="articleurl" style="width:500px"></el-input>
  104. <el-button type="primary" @click="spiderArticle" style="margin-left:20px">抓取</el-button>
  105. </el-form-item>
  106. <el-form-item v-loading="loading" class="detail">
  107. <fuEditor
  108. v-model="form.content"
  109. :isClear="isClear"
  110. @change="change"
  111. ></fuEditor>
  112. <!-- <vue-ueditor-wrap ref="editor" v-model="form.content" :config="myConfig"></vue-ueditor-wrap> -->
  113. </el-form-item>
  114. <!-- <el-form-item label="状态" prop="status">
  115. <el-select v-model="form.status" placeholder="请选择状态">
  116. <el-option key="1" label="编辑中" :value="1"></el-option>
  117. <el-option key="2" label="上线" :value="2"></el-option>
  118. <el-option key="-1" label="下线" :value="-1"></el-option>
  119. </el-select>
  120. </el-form-item>
  121. <el-form-item label="">
  122. <el-button type="primary" @click="save">保存</el-button>
  123. </el-form-item> -->
  124. <el-form-item >
  125. </el-form-item>
  126. <el-form-item >
  127. </el-form-item>
  128. <el-form-item >
  129. </el-form-item>
  130. </el-form>
  131. </section>
  132. </template>
  133. <script>
  134. import fuEditor from "@/components/fuEditor/index.vue";
  135. export default {
  136. components: {
  137. fuEditor,
  138. },
  139. data() {
  140. return {
  141. loading: false,
  142. imageUrl: "",
  143. test: "",
  144. list: [],
  145. form: {
  146. title: "",
  147. category_id: "",
  148. content: "",
  149. imgs: [],
  150. address: "",
  151. point: "",
  152. status: 1,
  153. img: "",
  154. isbanner:0,
  155. category:'每日点评',
  156. },
  157. isClear: false,
  158. keyword: "",
  159. point: {
  160. lng: "",
  161. lat: "",
  162. },
  163. BMap: null,
  164. myConfig: {
  165. // 编辑器自动被内容撑高
  166. autoHeightEnabled: true,
  167. // 初始容器高度
  168. initialFrameHeight: 500,
  169. // 初始容器宽度
  170. initialFrameWidth: '100%',
  171. // 上传文件接口,实现上传图片功能必须的配置,这个地址会在后端配置的时候产生,此处先放上结果
  172. serverUrl: '/api/admin/ueditor/upload',
  173. },
  174. categoryList:[
  175. {label:"游资专场",value:"游资专场"},
  176. {label:"冠军交割",value:"冠军交割"},
  177. {label:"牛人专场",value:"牛人专场"},
  178. {label:"妖股列传",value:"妖股列传"},
  179. {label:"每日点评",value:"每日点评"}
  180. ],
  181. bannerList:[
  182. {label:"否",value:0},
  183. {label:"是",value:1}
  184. ],
  185. articleurl:"",
  186. };
  187. },
  188. methods: {
  189. getData() {
  190. this.$api.getArticleById({ id: this.form.id }).then((res) => {
  191. this.form = res.data.data;
  192. });
  193. },
  194. getContent() {
  195. this.$api.getContentList({ page: this.page }).then((res) => {
  196. this.loading = false;
  197. if (res.status == 200) {
  198. this.list = res.data.data.list;
  199. } else {
  200. this.$message({
  201. message: res.message,
  202. type: "error",
  203. });
  204. }
  205. });
  206. },
  207. change(val) {
  208. this.form.content = val;
  209. },
  210. upload(type) {
  211. var file = document.getElementById(type).files;
  212. var data = new FormData();
  213. data.append("file", file[0]);
  214. this.$api.uploadFile(data).then((res) => {
  215. if (res.data.code == 0) {
  216. let imgs = this.form.imgs || [];
  217. imgs.push(res.data.data.url);
  218. this.form.imgs = imgs;
  219. // this.$set(form,type,res.data.data.url)
  220. this.$message({ message: "上传成功!", type: "success" });
  221. } else {
  222. this.$message.error(res.data.message);
  223. }
  224. });
  225. },
  226. save() {
  227. var parm = this.form;
  228. // parm.point=this.point.lng+','+this.point.lat
  229. parm.type = "champion";
  230. if (parm.id) {
  231. // debugger;
  232. this.$api.editArticle(parm).then((res) => {
  233. if (res.data.code == 0) {
  234. this.$message({ message: "修改成功!", type: "success" });
  235. this.$router.push({ path: "/championsay" });
  236. } else {
  237. this.$message.error(res.data.message);
  238. }
  239. });
  240. } else {
  241. this.$api.addArticle(parm).then((res) => {
  242. if (res.data.code == 0) {
  243. this.$message({ message: "添加成功!", type: "success" });
  244. this.$router.push({ path: "/championsay" });
  245. } else {
  246. this.$message.error(res.data.message);
  247. }
  248. });
  249. }
  250. },
  251. spiderArticle() {
  252. this.loading = true;
  253. this.$api.getSpiderArticle({ url: this.articleurl }).then((res) => {
  254. console.log('data',res.data)
  255. this.form.content = res.data.data;
  256. this.loading = false;
  257. });
  258. },
  259. handleAvatarSuccess(res, file) {
  260. this.form.img = res.data.url;
  261. },
  262. beforeAvatarUpload(file) {
  263. return;
  264. const isJPG = file.type === "image/jpeg";
  265. const isLt2M = file.size / 1024 / 1024 < 2;
  266. if (!isJPG) {
  267. this.$message.error("上传头像图片只能是 JPG 格式!");
  268. }
  269. if (!isLt2M) {
  270. this.$message.error("上传头像图片大小不能超过 2MB!");
  271. }
  272. return isJPG && isLt2M;
  273. },
  274. onBaiduMapReady(e) {
  275. // const that = this
  276. this.BMap = e.BMap;
  277. },
  278. getClickInfo(e) {
  279. // 调整地图中心位置
  280. this.point = e.point;
  281. // 此时已经可以获取到BMap类
  282. if (this.BMap) {
  283. const that = this;
  284. // Geocoder() 类进行地址解析
  285. // 创建地址解析器的实例
  286. const geoCoder = new this.BMap.Geocoder();
  287. // getLocation() 类--利用坐标获取地址的详细信息
  288. // getPoint() 类--获取位置对应的坐标
  289. geoCoder.getLocation(e.point, function (res) {
  290. const addrComponent = res.addressComponents;
  291. const surroundingPois = res.surroundingPois;
  292. const province = addrComponent.province;
  293. const city = addrComponent.city;
  294. const district = addrComponent.district;
  295. let addr = addrComponent.street;
  296. if (surroundingPois.length > 0 && surroundingPois[0].title) {
  297. if (addr) {
  298. addr += `-${surroundingPois[0].title}`;
  299. } else {
  300. addr += `${surroundingPois[0].title}`;
  301. }
  302. } else {
  303. addr += addrComponent.streetNumber;
  304. }
  305. that.form.address = province + city + district + addr;
  306. });
  307. }
  308. },
  309. },
  310. created() {
  311. // this.getContent()
  312. if (this.$route.query.id) {
  313. this.form.id = this.$route.query.id;
  314. this.id = this.$route.query.id;
  315. this.getData();
  316. }
  317. },
  318. };
  319. </script>