operation.vue 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. <template>
  2. <div id="">
  3. <el-dialog
  4. :close-on-click-modal="false"
  5. title="路由配置"
  6. :visible.sync="dialogVisible"
  7. width="1000px"
  8. >
  9. <el-form
  10. :model="ruleForm"
  11. :rules="rules"
  12. ref="ruleForm"
  13. label-width="100px"
  14. class="demo-ruleForm"
  15. >
  16. <el-row>
  17. <el-col :span="24">
  18. <el-form-item label="所属菜单" prop="MenuId">
  19. <el-cascader
  20. v-model="ruleForm.MenuId"
  21. placeholder="选择目录"
  22. :options="$parent.routerTableData"
  23. :props="{
  24. value: 'MenuId',
  25. label: 'Name',
  26. children: 'ChildList',
  27. emitPath: false,
  28. }"
  29. ></el-cascader
  30. ></el-form-item>
  31. </el-col>
  32. <el-col :span="24">
  33. <el-form-item label="标题" prop="Title">
  34. <el-input v-model.trim="ruleForm.Title"></el-input>
  35. </el-form-item>
  36. </el-col>
  37. <el-col :span="24">
  38. <el-form-item label="图片上传" prop="ImageUrl">
  39. <el-image
  40. v-if="ruleForm.ImageUrl"
  41. style="width: 112px; height: 70px"
  42. :src="$methods.splitImgHost(ruleForm.ImageUrl)"
  43. :preview-src-list="[$methods.splitImgHost(ruleForm.ImageUrl)]"
  44. >
  45. </el-image>
  46. <label for="uploads"><span class="btn">上传图片</span></label>
  47. <input
  48. type="file"
  49. id="uploads"
  50. style="display: none"
  51. @change="uploadImg"
  52. />
  53. </el-form-item>
  54. </el-col>
  55. <el-col :span="12">
  56. <el-form-item label="是否置顶" prop="IsTop">
  57. <el-radio-group v-model="ruleForm.IsTop">
  58. <el-radio :label="true">是</el-radio>
  59. <el-radio :label="false">否</el-radio>
  60. </el-radio-group></el-form-item
  61. >
  62. </el-col>
  63. <el-col :span="12">
  64. <el-form-item label="会员可见" prop="IsMemberRead">
  65. <el-radio-group v-model="ruleForm.IsMemberRead">
  66. <el-radio :label="true">是</el-radio>
  67. <el-radio :label="false">否</el-radio>
  68. </el-radio-group></el-form-item
  69. >
  70. </el-col>
  71. <el-col :span="12">
  72. <el-form-item label="状态" prop="Status">
  73. <el-radio-group v-model="ruleForm.Status">
  74. <el-radio :label="1">正常</el-radio>
  75. <el-radio :label="0">停用</el-radio>
  76. </el-radio-group></el-form-item
  77. >
  78. </el-col>
  79. <el-col :span="12">
  80. <el-form-item label="创建时间" prop="CreateTime">
  81. <el-date-picker
  82. v-model="ruleForm.CreateTime"
  83. type="datetime"
  84. placeholder="选择创建日期时间"
  85. format="yyyy-MM-dd HH:mm:ss"
  86. value-format="yyyy-MM-dd HH:mm:ss"
  87. >
  88. </el-date-picker
  89. ></el-form-item>
  90. </el-col>
  91. <el-col :span="24">
  92. <el-form-item label="文章内容" prop="NewContent">
  93. <editor
  94. v-model="ruleForm.NewContent"
  95. :min-height="300"
  96. :max-height="500"
  97. /></el-form-item>
  98. </el-col>
  99. </el-row>
  100. </el-form>
  101. <span slot="footer" class="dialog-footer">
  102. <el-button size="small" @click="close">取 消</el-button>
  103. <el-button
  104. size="small"
  105. type="primary"
  106. @click="submit('ruleForm')"
  107. :loading="loading"
  108. >确 定</el-button
  109. >
  110. </span>
  111. </el-dialog>
  112. </div>
  113. </template>
  114. <script>
  115. import Editor from "@/components/Editor";
  116. export default {
  117. components: { Editor },
  118. data() {
  119. return {
  120. dialogVisible: false,
  121. ruleForm: {
  122. Title: "",
  123. IsTop: false,
  124. IsMemberRead: false,
  125. Status: 1,
  126. MenuId: "",
  127. ImageUrl: "",
  128. CreateTime: "",
  129. },
  130. rules: {
  131. Title: [{ required: true, message: "请输入标题", trigger: "blur" }],
  132. ImageUrl: [
  133. { required: true, message: "请上传图片", trigger: "change" },
  134. ],
  135. MenuId: [
  136. {
  137. required: true,
  138. message: "请选择所属菜单",
  139. trigger: ["blur", "change"],
  140. },
  141. ],
  142. },
  143. loading: false,
  144. };
  145. },
  146. methods: {
  147. showInit(e, id) {
  148. if (e) {
  149. this.ruleForm = e;
  150. } else {
  151. this.ruleForm = {
  152. Title: "",
  153. IsTop: false,
  154. IsMemberRead: false,
  155. Status: 1,
  156. ImageUrl: "",
  157. MenuId: "",
  158. CreateTime: "",
  159. };
  160. }
  161. this.dialogVisible = true;
  162. },
  163. uploadImg(e) {
  164. var self = this;
  165. var file = e.target.files[0];
  166. if (file === undefined) {
  167. return;
  168. }
  169. if (file.size > 0.6 * 1024 * 1024) {
  170. self.$message.error("图片不得大于600kb");
  171. return;
  172. }
  173. var type = e.target.value.toLowerCase().split(".").splice(-1);
  174. if (type[0] != "jpg" && type[0] != "png" && type[0] != "jpeg") {
  175. self.$message.error("上传格式需为:.jpg/.png/.jpeg");
  176. e.target.value = "";
  177. return;
  178. }
  179. let formDatas = new FormData();
  180. formDatas.append("file", file);
  181. this.$api
  182. .XfSysBussinessUploadFile(formDatas)
  183. .then((res) => {
  184. this.$set(this.ruleForm, "ImageUrl", res.Data);
  185. this.$refs["ruleForm"].validateField("ImageUrl");
  186. })
  187. .finally(() => {
  188. e.target.value = "";
  189. });
  190. },
  191. close() {
  192. this.loading = false;
  193. this.$refs["ruleForm"].resetFields();
  194. this.dialogVisible = false;
  195. },
  196. submit(formName) {
  197. this.$refs[formName].validate(async (valid) => {
  198. if (valid) {
  199. this.$api.XfSysBussinessSaveNews(this.ruleForm).then((res) => {
  200. this.close();
  201. this.$parent.search();
  202. });
  203. } else {
  204. console.log("error submit!!");
  205. return false;
  206. }
  207. });
  208. },
  209. },
  210. };
  211. </script>
  212. <style lang="scss" scoped></style>