editNavigation.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400
  1. <template>
  2. <div class="mainBox">
  3. <!--搜索功能 start------------------------------------------------------------>
  4. <!-- <div class="layerBox_search">
  5. <div class="layerBoxLine">
  6. <el-row>
  7. <el-col :span="8">
  8. <div class="searchBox">
  9. <div class="searchTitle">展示名称:</div>
  10. <el-input placeholder="请输入展示名称" autocomplete="off" v-model="getApiData.alias"/>
  11. </div>
  12. </el-col>
  13. <el-col :span="8">
  14. <div class="searchBox">
  15. <div class="searchTitle">栏目名称:</div>
  16. <el-input placeholder="请输入栏目名称" autocomplete="off" v-model="getApiData.name"/>
  17. </div>
  18. </el-col>
  19. <el-col :span="8">
  20. <div class="searchBox">
  21. <div class="searchTitle">行政职能部门:</div>
  22. <el-cascader :key="searchDepartmentKey" v-model="getApiData.department_id" placeholder="请选择行政职能部门" :props="searchDepartmentData" filterable clearable></el-cascader>
  23. </div>
  24. </el-col>
  25. </el-row>
  26. </div>
  27. <div class="layerBoxLineTwo">
  28. <el-row>
  29. <el-col :span="8">
  30. <div class="searchBox">
  31. <div class="searchTitle">行政区划:</div>
  32. <el-cascader :key="searchCascaderKey" v-model="getApiData.city_id" placeholder="选择导航池所属行政区划" :props="searchCityData" filterable clearable></el-cascader>
  33. </div>
  34. </el-col>
  35. </el-row>
  36. </div>
  37. </div> -->
  38. <!-- <div class="layerBoxNoBg">
  39. <div></div>
  40. <div>
  41. <el-button @click="clearSearchList">重置</el-button>
  42. <el-button type="primary" style="margin-right:20px" @click="getData()">搜索</el-button>
  43. </div>
  44. </div> -->
  45. <!--搜索功能 end------------------------------------------------------------>
  46. <!--表格内容 start------------------------------------------------------------>
  47. <div class="layerBox">
  48. <tableTitle :name="tableDivTitle"/>
  49. <el-row>
  50. <template>
  51. <el-table :data="tableData" style="width: 100%" row-key="id" :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
  52. <el-table-column fixed prop="id" label="编号" width="180"></el-table-column>
  53. <el-table-column prop="name" label="栏目名称"></el-table-column>
  54. <el-table-column prop="alias" label="展示名称"></el-table-column>
  55. <el-table-column prop="sort" label="排序"></el-table-column>
  56. <el-table-column prop="created_at" label="创建时间"></el-table-column>
  57. <el-table-column prop="updated_at" label="修改时间"></el-table-column>
  58. <el-table-column fixed="right" label="操作" width="120" header-align="center">
  59. <template slot-scope="scope">
  60. <div class="listBtnBox">
  61. <div class="listEditBtn" @click="editRow(scope.row.category_id)"><i class="el-icon-edit-outline"></i>编辑</div>
  62. </div>
  63. </template>
  64. </el-table-column>
  65. </el-table>
  66. </template>
  67. </el-row>
  68. </div>
  69. <!--分页 start------------------------------------------------------------>
  70. <!-- <div class="alignBox">
  71. <el-row>
  72. <el-col :span="24">
  73. <el-pagination :current-page="getApiData.page" @size-change="handleSizeChange" @current-change="handleCurrentChange" :page-size="10" layout="total, prev, pager, next, jumper" :total="allCount"></el-pagination>
  74. </el-col>
  75. </el-row>
  76. </div> -->
  77. <!--分页 end------------------------------------------------------------>
  78. <!--表格内容 end------------------------------------------------------------>
  79. <!--弹出框start------------------------------------------------------------>
  80. <el-dialog title="编辑栏目" :visible.sync="windowStatus">
  81. <el-form :model="form" ref="form" :rules="formRules" autocomplete="off" label-position="left">
  82. <div class="formDiv">
  83. <el-form-item label="展示名称:" :label-width="formLabelWidth" prop="alias" class="custom-align-right">
  84. <el-input v-model="form.alias" autocomplete="off"></el-input>
  85. <input type="hidden" v-model="form.seo_title">
  86. </el-form-item>
  87. <el-form-item label="展示标题:" :label-width="formLabelWidth" prop="seo_title" class="custom-align-right">
  88. <div class="formLabelFloatBox">
  89. <el-input v-model="form.seo_title" autocomplete="off"></el-input>
  90. </div>
  91. </el-form-item>
  92. <el-form-item label="展示关键词:" :label-width="formLabelWidth" prop="seo_keywords" class="custom-align-right">
  93. <div class="formLabelFloatBox">
  94. <inputTag :initialTags="tags" @tags-updated="updateTags"/>
  95. <!-- <inputTag :initialTags="form.seo_keywords" @tags-updated="updateTags"/> -->
  96. <!-- <el-input v-model="form.seo_keywords" autocomplete="off"></el-input> -->
  97. </div>
  98. </el-form-item>
  99. <el-form-item label="展示描述:" :label-width="formLabelWidth" prop="seo_description" class="custom-align-right">
  100. <el-input type="textarea" v-model="form.seo_description" class="custom-textarea"></el-input>
  101. </el-form-item>
  102. <el-form-item label="排序:" :label-width="formLabelWidth" prop="sort" class="custom-align-right">
  103. <div class="formLabelFloatBox">
  104. <el-input v-model="form.sort" autocomplete="off" ></el-input>
  105. </div>
  106. </el-form-item>
  107. </div>
  108. </el-form>
  109. <div slot="footer" class="dialog-footer">
  110. <div>
  111. <el-button @click="closeWindow">取 消</el-button>
  112. <el-button type="primary" @click="addToServe">提交</el-button>
  113. </div>
  114. </div>
  115. </el-dialog>
  116. <!--弹出框2:外部表单弹出框 end------------------------------------------------------------>
  117. </div>
  118. </template>
  119. <script>
  120. //引入公用样式
  121. import '@/styles/global.less';
  122. //表格标题
  123. import tableTitle from './components/tableTitle';
  124. import InputTag from '@/components/InputTag'
  125. export default {
  126. components: {
  127. tableTitle,//表格标题
  128. InputTag
  129. },
  130. data() {
  131. //0.全局操作 start ------------------------------------------------------------>
  132. //表单验证
  133. const validateEmpty = (rule,value,callback) => {
  134. if (value.length == 0) {
  135. callback(new Error('该项不能为空!'))
  136. } else {
  137. callback()
  138. }
  139. }
  140. let self = this;
  141. //0.全局操作 end ------------------------------------------------------------>
  142. return {
  143. tags: ['初始标签1', '初始标签2'],
  144. //1.列表和分页相关 start ------------------------------------------------------------>
  145. tableDivTitle:"栏目详情",
  146. tableData: [],//列表
  147. allCount:0,//总条数
  148. editId:0,//要修改的网站id
  149. getApiData:{
  150. website_id:0,//网站id
  151. name:"",//导航名称
  152. alias:"",//网站导航名称
  153. city_id:"",//行政区划
  154. department_id:"",//行政职能部门
  155. page:1,//当前是第几页
  156. pageSize:10,//一共多少条
  157. },
  158. website_column_arr:[],//获得的网系
  159. //分页相关 end ------------------------------------------------------------>
  160. //2.弹出框设置 start ------------------------------------------------------------>
  161. //是否显示弹出窗口
  162. windowStatus:false,
  163. formLabelWidth: '120px',
  164. //弹出框设置 end ------------------------------------------------------------>
  165. //3.搜索相关 start ------------------------------------------------------------>
  166. //3.1获得职能部门
  167. searchDepartmentKey:0,
  168. searchDepartmentData: {
  169. checkStrictly: true,
  170. lazy: true,
  171. async lazyLoad (node, resolve) {
  172. const { level, data } = node;
  173. if (data && data.children && data.children.length !== 0) {
  174. return resolve(node)
  175. }
  176. console.log(level)
  177. let parentId = level == 0 ? 0 : data.value
  178. let parames = {
  179. 'pid':parentId
  180. }
  181. self.$store.dispatch('pool/getDepartment',parames).then(res=> {
  182. if (res.data) {
  183. const nodes = res.data.map(item => ({
  184. value: item.id,
  185. label: item.name,
  186. leaf: level >= 3,
  187. children: []
  188. }))
  189. resolve(nodes)
  190. }
  191. })
  192. }
  193. },
  194. //3.2获得行政区划
  195. searchCascaderKey:0, //列表缓存key
  196. searchCityData: {
  197. checkStrictly: true,
  198. lazy: true,
  199. async lazyLoad (node, resolve) {
  200. const { level, data } = node;
  201. if (data && data.children && data.children.length !== 0) {
  202. return resolve(node)
  203. }
  204. console.log(level)
  205. let parentId = level == 0 ? 0 : data.value
  206. let parames = {
  207. 'pid':parentId
  208. }
  209. self.$store.dispatch('pool/getcityList',parames).then(res=> {
  210. if (res.data) {
  211. const nodes = res.data.map(item => ({
  212. value: item.id,
  213. label: item.name,
  214. leaf: level >= 3,
  215. children: []
  216. }))
  217. resolve(nodes)
  218. }
  219. })
  220. }
  221. },
  222. //搜索相关 end ------------------------------------------------------------>
  223. //3.弹出框中的表单设置 start ------------------------------------------------------------>
  224. //3.1 表单收集的数据
  225. form: {
  226. website_id:0,//网站id
  227. category_id:0,//导航id
  228. alias:"",//导航名称
  229. seo_title:"",//导航seo名称
  230. seo_keywords:"",//导航关键词
  231. seo_description:"",//导航描述
  232. sort:0//排序
  233. },
  234. //3.2表单验证规则
  235. formRules: {
  236. //网站名称不能为空
  237. alias:[{required:true,trigger:'blur',validator:validateEmpty}],
  238. sort:[{required:true,trigger:'blur',validator:validateEmpty}],
  239. //网站标题,关键词,描述不能为空
  240. seo_title:[{required:true,trigger:'blur',validator:validateEmpty}],
  241. seo_keywords:[{required:true,trigger:'blur',validator:validateEmpty}],
  242. seo_description:[{required:true,trigger:'blur',validator:validateEmpty}],
  243. },
  244. //弹出框中的表单设置 end ------------------------------------------------------------>
  245. }
  246. },
  247. methods: {
  248. //1.列表和分页相关 start ------------------------------------------------------------>
  249. //1.1 获取内容
  250. getData(){
  251. //行政职能部门提交最后一个
  252. if(this.getApiData.department_id.length>0){
  253. this.getApiData.department_id = this.getApiData.department_id[this.getApiData.department_id.length - 1];
  254. }
  255. //城市id提交最后一个
  256. if(this.getApiData.city_id.length>0){
  257. this.getApiData.city_id = this.getApiData.city_id[this.getApiData.city_id.length - 1];
  258. }
  259. this.$store.dispatch('pool/getWebsiteAllCategory',this.getApiData).then(res=> {
  260. let data = res.data;
  261. this.tableData = data;//放入数据
  262. // this.allCount = res.data.count;//放入总条数
  263. })
  264. },
  265. //1.2 列表内容分页
  266. //直接跳转
  267. // handleSizeChange(val) {
  268. // this.getApiData.page = val;
  269. // this.getData();
  270. // },
  271. // //1.3 点击分页
  272. // handleCurrentChange(val) {
  273. // this.getApiData.page = val;
  274. // this.getData();
  275. // },
  276. //1.4 重置按钮
  277. clearSearchList(){
  278. this.tableData = [];
  279. this.getApiData.alias = "";
  280. this.getApiData.name = "";
  281. this.getApiData.department_id = [];
  282. this.getApiData.city_id = [];
  283. this.getApiData.page = 1;
  284. this.getApiData.pageSize = 10;
  285. this.getData();
  286. },
  287. //列表和分页相关 end ------------------------------------------------------------>
  288. //2.弹出框设置 start ------------------------------------------------------------>
  289. //2.1 打开弹出框
  290. openWindow() {
  291. this.clearToServe();
  292. this.windowStatus = true;
  293. },
  294. //2.2 关闭弹出框
  295. closeWindow(){
  296. this.windowStatus = false;
  297. this.clearToServe();
  298. },
  299. //2.3 清空提交窗口
  300. clearToServe(){
  301. //重置窗口
  302. this.editId = "";
  303. this.form.website_id = 0;
  304. this.form.category_id = 0;
  305. this.form.alias = "";
  306. this.form.seo_title = "";
  307. this.form.seo_keywords = "";
  308. this.form.seo_description = "";
  309. },
  310. //弹出框设置 end ------------------------------------------------------------>
  311. //4.编辑导航 start ------------------------------------------------------------>
  312. //回显数据
  313. editRow(id){
  314. this.openWindow();
  315. let data = {
  316. website_id:this.$route.query.website_id,
  317. category_id:id
  318. }
  319. this.$store.dispatch('pool/getWebsiteCategoryOnes',data).then(res=> {
  320. // console.log(res.data)
  321. this.form.website_id = this.$route.query.website_id;
  322. this.form.category_id = id;
  323. this.form.alias = res.data.alias;
  324. this.form.seo_title = res.data.seo_title;
  325. this.form.seo_keywords = res.data.seo_keywords;
  326. this.tags = res.data.seo_keywords?res.data.seo_keywords.split(','):[];
  327. this.form.seo_description = res.data.seo_description;
  328. this.form.sort = res.data.sort;
  329. })
  330. },
  331. //提交编辑的数据
  332. addToServe(){
  333. //把标题的值给与seo_title
  334. // this.form.seo_title = this.form.alias;
  335. this.$refs.form.validate(valid => {
  336. if (valid) {
  337. this.$store.dispatch('pool/upWebsiteCategoryones',this.form).then(res=> {
  338. //汇报结果
  339. this.$message({
  340. type: 'success',
  341. message: '已成功修改导航信息!'
  342. });
  343. //清空并退出
  344. this.closeWindow();
  345. this.getData();
  346. }).catch(() => {
  347. this.$message({
  348. type: 'info',
  349. message: '网络错误,请重试!'
  350. });
  351. })
  352. }
  353. })
  354. this.getData();
  355. },
  356. //编辑导航 end ------------------------------------------------------------>
  357. updateTags(newTags) {
  358. // this.foem.seo_keywords = newTags;
  359. this.tags = newTags;
  360. this.form.seo_keywords = newTags.join(',');
  361. },
  362. },
  363. mounted(){
  364. //console.log(this.$route.query);
  365. //获取具体参数
  366. this.getApiData.website_id = this.$route.query.website_id;
  367. this.getApiData.page = this.$route.query.page;
  368. this.getApiData.pageSize = this.$route.query.pageSize;
  369. //获取页面列表
  370. this.getData();
  371. }
  372. }
  373. </script>
  374. <style scoped lang="less">
  375. //表单微调 start------------------------------------------------------------>*/
  376. ::v-deep .custom-form-item > .el-form-item__label {
  377. line-height: 140px !important;
  378. }
  379. ::v-deep .custom-textarea .el-textarea__inner {
  380. resize: none; /* 禁止用���拖拽调整大小 */
  381. }
  382. ::v-deep .custom-align-right .el-form-item__label {
  383. text-align: right; /* 设置标签文字右对齐 */
  384. }
  385. </style>