flieList.vue 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080
  1. <template>
  2. <div class="container">
  3. <div class="container-box">
  4. <toolList :tooltit="tooltit"></toolList>
  5. <div class="main-box">
  6. <div class="inner-left" style="overflow: hidden">
  7. <div class="button-list">
  8. <el-button size="medium" type="" @click="addMenu">
  9. 添加子目录</el-button
  10. >
  11. <el-button size="medium" type="" @click="delMenu"> 删除 </el-button>
  12. <el-dropdown
  13. @command="treeAction"
  14. trigger="click"
  15. style="margin-left: 10px"
  16. >
  17. <el-button type="" plain size="medium"> 操作 </el-button>
  18. <el-dropdown-menu slot="dropdown">
  19. <el-dropdown-item :command="1">全部展开</el-dropdown-item>
  20. <el-dropdown-item :command="2">全部关闭</el-dropdown-item>
  21. </el-dropdown-menu>
  22. </el-dropdown>
  23. </div>
  24. <el-alert type="warning" :closable="false">
  25. <template slot="title">
  26. {{
  27. actionName
  28. ? "当前选择节点名称:" + actionName
  29. : "当前无选择节点"
  30. }}
  31. <span v-show="actionName" class="clearStyle" @click="clearClick"
  32. >取消选择</span
  33. >
  34. </template>
  35. </el-alert>
  36. <div style="margin: 10px 0">
  37. <el-input
  38. size="medium"
  39. placeholder="请输入内容"
  40. v-model="filterText"
  41. class="input-with-select"
  42. clearable
  43. @change="
  44. () => {
  45. if (!filterText) {
  46. searchMenu();
  47. }
  48. }
  49. "
  50. >
  51. <el-button
  52. slot="append"
  53. @click="searchMenu"
  54. icon="el-icon-search"
  55. ></el-button>
  56. </el-input>
  57. </div>
  58. <div
  59. style="
  60. height: calc(100% - 160px);
  61. overflow-y: auto;
  62. margin-top: 20px;
  63. "
  64. >
  65. <el-tree
  66. ref="catalogTree"
  67. :expand-on-click-node="true"
  68. :auto-expand-parent="true"
  69. :default-expand-all="true"
  70. :props="defaultProps"
  71. :data="menuList"
  72. @node-click="nodeClick"
  73. :filter-node-method="filterNode"
  74. node-key="id"
  75. >
  76. <span class="custom-tree-node" slot-scope="{ node }">
  77. <span>
  78. <span style="color: #009cff" class=""></span>
  79. <span
  80. :style="
  81. node.data.hasOwnProperty('parent')
  82. ? 'font-size:14px;padding-left:5px'
  83. : 'font-size:12px;padding-left:5px'
  84. "
  85. >{{ node.data.title }}</span
  86. >
  87. </span>
  88. </span>
  89. </el-tree>
  90. </div>
  91. <div class="tree-action"></div>
  92. </div>
  93. <div class="inner-right">
  94. <div style="margin-bottom: 10px">
  95. <el-button
  96. v-show="actionName"
  97. class="btn-check"
  98. size="medium"
  99. @click="addFile"
  100. >
  101. 上传附件
  102. </el-button>
  103. <el-button v-show="idList && idList.length > 0" @click="moreDown"
  104. >批量下载</el-button
  105. >
  106. </div>
  107. <div class="tabbox">
  108. <el-table
  109. height="calc(100% - 10px)"
  110. class="com-table"
  111. ref="multipleTable"
  112. :data="tableData"
  113. tooltip-effect="dark"
  114. border
  115. size="small"
  116. style="width: 100%"
  117. v-loading="loading"
  118. @selection-change="handleSelectionChange"
  119. >
  120. <el-table-column type="selection" width="55"> </el-table-column>
  121. <el-table-column
  122. prop="title"
  123. width="180"
  124. show-overflow-tooltip
  125. label="材料名称"
  126. >
  127. </el-table-column>
  128. <el-table-column label="会议名称">
  129. <template slot-scope="scope">
  130. <span class="">{{ scope.row.meeting }}</span>
  131. </template>
  132. </el-table-column>
  133. <el-table-column label="材料背景">
  134. <template slot-scope="scope">
  135. <span class="">{{ scope.row.titleBg }}</span>
  136. </template>
  137. </el-table-column>
  138. <el-table-column label="文件名称" width="180" show-overflow-tooltip>
  139. <template slot-scope="scope">
  140. <span class="">{{ scope.row.fileName }}</span>
  141. </template>
  142. </el-table-column>
  143. <el-table-column
  144. prop="createTime"
  145. show-overflow-tooltip
  146. label="发布时间"
  147. width="140"
  148. />
  149. <el-table-column label="操作" width="150px" align="center">
  150. <template slot-scope="scope">
  151. <el-button
  152. class="font-btn"
  153. size="mini"
  154. type="text"
  155. plain
  156. @click="downLoad(scope.row)"
  157. >下载
  158. </el-button>
  159. <el-button
  160. class="font-btn"
  161. size="mini"
  162. type="text"
  163. plain
  164. @click="deleteOne(scope.row)"
  165. >删除
  166. </el-button>
  167. </template>
  168. </el-table-column>
  169. </el-table>
  170. <el-pagination
  171. class="pageBox"
  172. @current-change="currchange"
  173. layout="prev, pager, next"
  174. background
  175. :total="total"
  176. >
  177. </el-pagination>
  178. </div>
  179. </div>
  180. </div>
  181. </div>
  182. <el-dialog
  183. class="p-new-box"
  184. size="50%"
  185. title="新增目录"
  186. :append-to-body="true"
  187. :visible.sync="addDialogStatus"
  188. :close-on-click-modal="false"
  189. >
  190. <el-form
  191. :model="formData"
  192. :rules="rules"
  193. ref="ruleForm"
  194. label-width="100px"
  195. class="demo-ruleForm"
  196. style="width: 90%; margin: 30px auto"
  197. >
  198. <el-form-item label="目录名称:" prop="title">
  199. <el-input
  200. v-model="formData.title"
  201. placeholder="请输入标题"
  202. ></el-input>
  203. </el-form-item>
  204. <!-- 目录不设置权限
  205. <el-form-item label="查看权限:" prop="text">
  206. <el-radio-group v-model="formData.auth">
  207. <el-radio label="3">二级经理可见</el-radio>
  208. <el-radio label="2">三级经理可见</el-radio>
  209. <el-radio label="1">普通员工可见</el-radio>
  210. </el-radio-group>
  211. </el-form-item>
  212. -->
  213. <el-form-item
  214. prop="parentId"
  215. v-if="actionName != 'add'"
  216. label="父级编码:"
  217. >
  218. <el-input
  219. disabled
  220. v-model="formData.parentId"
  221. placeholder="请输入父级编码"
  222. ></el-input>
  223. </el-form-item>
  224. <el-form-item
  225. label="父级名称:"
  226. v-if="actionName != 'add'"
  227. prop="parentName"
  228. >
  229. <el-input
  230. disabled
  231. v-model="formData.parentName"
  232. readonly
  233. placeholder="请输入父级名称"
  234. ></el-input>
  235. </el-form-item>
  236. <el-form-item label="操作人:" prop="createName">
  237. <el-input
  238. v-model="formData.createName"
  239. disabled
  240. placeholder="请输入操作人"
  241. ></el-input>
  242. </el-form-item>
  243. <div class="drawer-footer" style="text-align: right">
  244. <el-button
  245. type="primary"
  246. size="medium"
  247. @click="submitForm('ruleForm')"
  248. >{{ subType }}</el-button
  249. >
  250. <el-button
  251. style="margin-right: 40px"
  252. size="medium"
  253. @click="resetForm('ruleForm')"
  254. >取消</el-button
  255. >
  256. </div>
  257. </el-form>
  258. </el-dialog>
  259. <el-dialog
  260. class="p-new-box"
  261. size="50%"
  262. :title="titname + '文件'"
  263. :append-to-body="true"
  264. :before-close="closedia"
  265. :visible.sync="dialogStatus"
  266. :close-on-click-modal="false"
  267. >
  268. <div v-loading="loadinged">
  269. <el-form
  270. v-if="titname != '查看'"
  271. :model="infolist"
  272. ref="infolist"
  273. :rules="filerules"
  274. >
  275. <el-form-item prop="title" class="info-line online">
  276. <span>材料名称:</span>
  277. <el-input v-model="infolist.title" placeholder="请输入材料名称">
  278. </el-input>
  279. </el-form-item>
  280. <el-form-item class="info-line online radviv" prop="text">
  281. <span>查看权限:</span>
  282. <el-radio-group v-model="infolist.auth">
  283. <el-radio label="2">二级经理可见</el-radio>
  284. <el-radio label="3">三级经理可见</el-radio>
  285. <el-radio label="1">普通员工可见</el-radio>
  286. </el-radio-group>
  287. </el-form-item>
  288. <el-form-item prop="meeting" class="info-line online">
  289. <span>会议名称:</span>
  290. <el-input v-model="infolist.meeting" placeholder="请输入会议名称">
  291. </el-input>
  292. </el-form-item>
  293. <el-form-item class="info-line online" prop="titleBg">
  294. <span>材料背景:</span>
  295. <el-input
  296. type="textarea"
  297. :rows="5"
  298. placeholder="请输入材料背景"
  299. style="width: calc(100%-100px)"
  300. v-model="infolist.titleBg"
  301. ></el-input>
  302. </el-form-item>
  303. <div class="info-line online">
  304. <span>附件:</span>
  305. <myUpload
  306. @uploadBack="uploadBack"
  307. :fileInfo="fileInfo"
  308. :fileList="fileInfo.fileList"
  309. style="width: 30% !important"
  310. >
  311. </myUpload>
  312. </div>
  313. </el-form>
  314. <div class="drawer-footer" style="text-align: right">
  315. <el-button size="medium" type="primary" @click="dialogCli(1)"
  316. >保 存</el-button
  317. >
  318. <el-button size="medium" @click="dialogCli(2)">取 消</el-button>
  319. </div>
  320. </div>
  321. </el-dialog>
  322. </div>
  323. </template>
  324. <script>
  325. import toolList from "../../../components/toolList";
  326. import myUpload from "../../../components/upload";
  327. export default {
  328. components: {
  329. toolList,
  330. myUpload,
  331. },
  332. data() {
  333. return {
  334. loadinged: false,
  335. addDialogStatus: false,
  336. tooltit: "文件共享管理",
  337. loading: false,
  338. defaultExpand: true,
  339. functionCode: "",
  340. filterText: "", // tree搜索value
  341. actionName: "", // 当前选择节点名称
  342. menuList: [], // tree数据源
  343. checkedMenu: [], // 选中节点的functionCode
  344. checkedNodes: [], // 选中节点的node值
  345. roleData: "", // 某一条数据
  346. tableData: [], // 表格数据源
  347. infolist: {
  348. isFile: "1",
  349. title: "", // 材料名称
  350. meeting: "", // 会议名称
  351. titleBg: "", // 材料背景
  352. auth: "1", // 查看权限
  353. mkFileShareAttachList: [], // 附件数据
  354. parentId: "",
  355. }, // 提交表单数据源
  356. formData: {
  357. id: "",
  358. title: "",
  359. createName: JSON.parse(sessionStorage.userInfo).loginName,
  360. createId: JSON.parse(sessionStorage.userInfo).loginNo,
  361. orgName: JSON.parse(sessionStorage.userInfo).groupName,
  362. orgId: JSON.parse(sessionStorage.userInfo).groupId,
  363. parentId: "",
  364. parentName: "",
  365. isFile: "0",
  366. auth: "1",
  367. },
  368. defaultProps: {
  369. children: "childDept",
  370. label: "title",
  371. },
  372. filerules: {
  373. title: [
  374. {
  375. required: true,
  376. message: "请输入材料名称",
  377. trigger: "change",
  378. },
  379. ],
  380. meeting: [
  381. {
  382. required: true,
  383. message: "请输入会议名称",
  384. trigger: "change",
  385. },
  386. ],
  387. titleBg: [
  388. {
  389. required: true,
  390. message: "请输入材料背景",
  391. trigger: "change",
  392. },
  393. ],
  394. },
  395. rules: {
  396. title: [
  397. {
  398. required: true,
  399. message: "请输入标题",
  400. trigger: "change",
  401. },
  402. ],
  403. parentId: [
  404. {
  405. required: false,
  406. message: "请选择父级编码",
  407. trigger: "change",
  408. },
  409. ],
  410. },
  411. subType: "",
  412. total: 0,
  413. pageSize: 1,
  414. params: {
  415. isFile: "1",
  416. id: "",
  417. },
  418. fileInfo: {
  419. type: "bt1n",
  420. typename: "上传文件",
  421. limit: 5,
  422. url: "/market/cmkFileShare/upload",
  423. fileList: [],
  424. },
  425. titname: "新增",
  426. dialogStatus: false,
  427. attList: [],
  428. idList: [],
  429. };
  430. },
  431. methods: {
  432. clearClick() {
  433. this.actionName = "";
  434. this.params.id = "";
  435. this.getList(this.params, this.pageSize);
  436. },
  437. moreDown() {
  438. let arr = [];
  439. this.idList.forEach((item) => {
  440. arr.push({
  441. id: item.fileCode,
  442. fileName: item.fileName,
  443. });
  444. });
  445. this.$http({
  446. url: "/market/cmkFileShare/downAllFile",
  447. method: "post",
  448. headers: {
  449. "Content-Type": "application/json",
  450. },
  451. responseType: "blob",
  452. data: { mkFileShareAttachList: arr },
  453. }).then((response) => {
  454. if (window.navigator && window.navigator.msSaveOrOpenBlob) {
  455. let blob = new Blob([response.data], {
  456. type: "application/vnd.ms-excel",
  457. });
  458. window.navigator.msSaveOrOpenBlob(
  459. blob,
  460. new Date().getTime().toString() + ".zip"
  461. );
  462. } else {
  463. /* 火狐谷歌的文件下载方式 */
  464. var blob = new Blob([response.data]);
  465. var downloadElement = document.createElement("a");
  466. var href = window.URL.createObjectURL(blob);
  467. downloadElement.href = href;
  468. downloadElement.download = new Date().getTime().toString() + ".zip";
  469. document.body.appendChild(downloadElement);
  470. downloadElement.click();
  471. document.body.removeChild(downloadElement);
  472. window.URL.revokeObjectURL(href);
  473. }
  474. });
  475. // this.idList.forEach((item) => {
  476. // this.$http({
  477. // url: "/market/cmkFileShare/downFile",
  478. // method: "post",
  479. // headers: {
  480. // "Content-Type": "application/json",
  481. // },
  482. // responseType: "blob",
  483. // data: { id: item.fileCode, fileName: item.fileName },
  484. // }).then((response) => {
  485. // if (window.navigator && window.navigator.msSaveOrOpenBlob) {
  486. // let blob = new Blob([response.data], {
  487. // type: "application/vnd.ms-excel",
  488. // });
  489. // window.navigator.msSaveOrOpenBlob(blob, item.fileName);
  490. // } else {
  491. // /* 火狐谷歌的文件下载方式 */
  492. // var blob = new Blob([response.data]);
  493. // var downloadElement = document.createElement("a");
  494. // var href = window.URL.createObjectURL(blob);
  495. // downloadElement.href = href;
  496. // downloadElement.download = item.fileName;
  497. // document.body.appendChild(downloadElement);
  498. // downloadElement.click();
  499. // document.body.removeChild(downloadElement);
  500. // window.URL.revokeObjectURL(href);
  501. // }
  502. // });
  503. // });
  504. },
  505. handleSelectionChange(val) {
  506. this.idList = val;
  507. },
  508. // 附件下载
  509. downLoad(fileData) {
  510. this.$http({
  511. url: "/market/cmkFileShare/downFile",
  512. method: "post",
  513. headers: {
  514. "Content-Type": "application/json",
  515. },
  516. responseType: "blob",
  517. data: { id: fileData.fileCode, fileName: fileData.fileName },
  518. }).then((response) => {
  519. if (window.navigator && window.navigator.msSaveOrOpenBlob) {
  520. let blob = new Blob([response.data], {
  521. type: "application/vnd.ms-excel",
  522. });
  523. window.navigator.msSaveOrOpenBlob(blob, fileData.fileName);
  524. } else {
  525. /* 火狐谷歌的文件下载方式 */
  526. var blob = new Blob([response.data]);
  527. var downloadElement = document.createElement("a");
  528. var href = window.URL.createObjectURL(blob);
  529. downloadElement.href = href;
  530. downloadElement.download = fileData.fileName;
  531. document.body.appendChild(downloadElement);
  532. downloadElement.click();
  533. document.body.removeChild(downloadElement);
  534. window.URL.revokeObjectURL(href);
  535. }
  536. });
  537. },
  538. // 新增附件
  539. addFile() {
  540. this.titname = "新增";
  541. this.dialogStatus = true;
  542. },
  543. // 上传回调
  544. uploadBack(v) {
  545. this.attList = v;
  546. },
  547. // 关闭弹窗
  548. closedia() {
  549. this.infolist = {};
  550. this.dialogStatus = false;
  551. this.fileInfo.fileList = [];
  552. this.getList(this.params, this.pageSize);
  553. },
  554. //添加 修改
  555. dialogCli(v) {
  556. this.fileInfo.fileList = [];
  557. if (v === 2) {
  558. this.dialogStatus = false;
  559. this.getList(this.params, this.pageSize);
  560. return;
  561. }
  562. this.$refs.infolist.validate((valid) => {
  563. if (valid) {
  564. let attList = [];
  565. for (let i = 0; i < this.attList.length; i++) {
  566. attList.push({
  567. id: this.attList[i].id,
  568. fileName: this.attList[i].fileName,
  569. });
  570. }
  571. this.infolist.mkFileShareAttachList = attList;
  572. this.infolist.isFile = "1";
  573. this.loadinged = true;
  574. this.$http({
  575. url: "/market/cmkFileShare/add",
  576. method: "post",
  577. headers: {
  578. "Content-Type": "application/json",
  579. },
  580. data: this.infolist,
  581. }).then((res) => {
  582. this.loadinged = false;
  583. if (res.data.result === 1) {
  584. this.$message({
  585. message: res.data.desc,
  586. type: "error",
  587. });
  588. } else {
  589. this.$message({
  590. message: "成功",
  591. type: "success",
  592. });
  593. this.fileInfo.fileList = [];
  594. this.infolist = {};
  595. this.dialogStatus = false;
  596. this.getList(this.params, this.pageSize);
  597. }
  598. });
  599. }
  600. });
  601. },
  602. // 新增目录-表单提交
  603. async submitForm(formName) {
  604. let valid = await this.$refs[formName].validate().catch((err) => err);
  605. if (valid) {
  606. this.$http({
  607. url:
  608. this.subType == "保存"
  609. ? "/market/cmkFileShare/add"
  610. : "/satisfy/qacatalog/update",
  611. method: "post",
  612. headers: {
  613. "Content-Type": "application/json",
  614. },
  615. data: this.formData,
  616. }).then((res) => {
  617. if (res.data.result == 0) {
  618. this.$message({
  619. type: "success",
  620. message: res.data.desc,
  621. });
  622. this.actionName = "";
  623. this.getData();
  624. this.addDialogStatus = false;
  625. }
  626. });
  627. } else {
  628. this.$message({
  629. type: "error",
  630. message: "新增失败",
  631. });
  632. this.addDialogStatus = false;
  633. return false;
  634. }
  635. },
  636. // 取消新增目录
  637. resetForm(formName) {
  638. this.actionName = "";
  639. this.$refs[formName].resetFields();
  640. this.addDialogStatus = false;
  641. },
  642. // 新增目录
  643. addMenu() {
  644. if (!this.actionName) {
  645. this.$message("请先点击选中要增加菜单的位置");
  646. } else {
  647. this.addDialogStatus = true;
  648. this.subType = "保存";
  649. this.formData.parentId = this.formData.id;
  650. this.formData.parentName = this.formData.title;
  651. this.formData.title = "";
  652. this.formData.id = "";
  653. }
  654. },
  655. // 树展开\折叠
  656. treeAction(val) {
  657. val == 1 ? (this.defaultExpand = true) : (this.defaultExpand = false);
  658. for (
  659. let i = 0;
  660. i < this.$refs.catalogTree.store._getAllNodes().length;
  661. i++
  662. ) {
  663. this.$refs.catalogTree.store._getAllNodes()[i].expanded =
  664. this.defaultExpand;
  665. }
  666. },
  667. deleteOne(val) {
  668. this.$confirm("即将删除此条数据, 是否删除?", "提示", {
  669. confirmButtonText: "确定",
  670. cancelButtonText: "取消",
  671. type: "warning",
  672. })
  673. .then(() => {
  674. this.pageSize = 1;
  675. this.$http({
  676. url: "/market/cmkFileShare/del",
  677. method: "post",
  678. headers: {
  679. "Content-Type": "application/json",
  680. },
  681. data: {
  682. id: val.id,
  683. isFile: "1",
  684. createId: val.createId,
  685. createName: val.createName,
  686. },
  687. }).then((res) => {
  688. if (res.data.result == 0) {
  689. this.$notify({
  690. title: "成功",
  691. message: res.data.desc,
  692. type: "success",
  693. });
  694. this.getList(this.params, this.pageSize);
  695. }else if(res.data.result == 1) {
  696. this.$notify({
  697. title: "失败",
  698. message: res.data.desc,
  699. type: "error",
  700. });
  701. }
  702. });
  703. })
  704. .catch(() => {});
  705. },
  706. // 删除目录
  707. delMenu() {
  708. if (!this.formData.id) {
  709. this.$message("请先点击选中要删除的菜单");
  710. } else {
  711. this.$confirm("即将删除此条数据, 是否删除?", "提示", {
  712. confirmButtonText: "确定",
  713. cancelButtonText: "取消",
  714. type: "warning",
  715. })
  716. .then(() => {
  717. this.$http({
  718. url: "/market/cmkFileShare/del",
  719. method: "post",
  720. headers: {
  721. "Content-Type": "application/json",
  722. },
  723. data: {
  724. id: this.formData.id,
  725. isFile: "0",
  726. createId: this.formData.createId,
  727. createName: this.formData.createName,
  728. },
  729. }).then((res) => {
  730. if (res.data.result == 0) {
  731. this.$notify({
  732. title: "成功",
  733. message: res.data.desc,
  734. type: "success",
  735. });
  736. this.actionName = "";
  737. this.getData();
  738. }else if(res.data.result == 1) {
  739. this.$notify({
  740. title: "失败",
  741. message: res.data.desc,
  742. type: "error",
  743. });
  744. }
  745. });
  746. })
  747. .catch(() => {});
  748. }
  749. },
  750. // 搜索按钮事件
  751. searchMenu() {
  752. this.$refs.catalogTree.filter(this.filterText);
  753. },
  754. // tree过滤方法
  755. filterNode(value, data) {
  756. if (!value) return true;
  757. return data.title.indexOf(value) !== -1;
  758. },
  759. // 点击树节点事件
  760. nodeClick(a, b) {
  761. let nodeData = JSON.parse(JSON.stringify(b.data));
  762. this.formData.title = nodeData.title;
  763. this.formData.parentId = nodeData.parentId;
  764. this.formData.parentName = nodeData.parentName;
  765. this.formData.id = nodeData.id;
  766. delete Object["children"];
  767. this.actionName = nodeData.title;
  768. this.subType = "修改";
  769. this.params.type = "";
  770. this.params.title = "";
  771. this.params.collection = "";
  772. this.params.catalogId = nodeData.id;
  773. this.params.id = nodeData.id;
  774. this.infolist.parentId = nodeData.id;
  775. this.getList(this.params, this.pageSize);
  776. },
  777. // 获取目录
  778. getData() {
  779. this.$http({
  780. url: "/market/cmkFileShare/queryList",
  781. method: "post",
  782. headers: {
  783. "Content-Type": "application/json",
  784. },
  785. data: { isFile: "0" },
  786. }).then((res) => {
  787. if (res.data && res.data.length > 0) {
  788. this.menuList = res.data;
  789. }
  790. });
  791. },
  792. toTreeData(data) {
  793. var pos = {};
  794. var tree = [];
  795. var i = 0;
  796. while (data.length != 0) {
  797. if (data[i].parentId == 0) {
  798. tree.push({
  799. id: data[i].id,
  800. title: data[i].title,
  801. children: [],
  802. });
  803. pos[data[i].id] = [tree.length - 1];
  804. data.splice(i, 1);
  805. i--;
  806. } else {
  807. var posArr = pos[data[i].parentId];
  808. if (posArr != undefined) {
  809. var obj = tree[posArr[0]];
  810. for (var j = 1; j < posArr.length; j++) {
  811. obj = obj.children[posArr[j]];
  812. }
  813. obj.children.push({
  814. id: data[i].id,
  815. title: data[i].title,
  816. children: [],
  817. });
  818. pos[data[i].id] = posArr.concat([obj.children.length - 1]);
  819. data.splice(i, 1);
  820. i--;
  821. }
  822. }
  823. i++;
  824. if (i > data.length - 1) {
  825. i = 0;
  826. }
  827. }
  828. return tree;
  829. },
  830. // 分页
  831. currchange(v) {
  832. this.pageSize = v;
  833. this.getList(this.params, this.pageSize);
  834. },
  835. //获取列表
  836. getList(v, n) {
  837. this.pageSize = n;
  838. this.loading = true;
  839. this.tableData = [];
  840. this.$http({
  841. url: "/market/cmkFileShare/queryPage",
  842. method: "post",
  843. headers: {
  844. "Content-Type": "application/json",
  845. page: '{"pageNo":"' + n + '","pageSize":"10"}',
  846. },
  847. data: v,
  848. }).then((res) => {
  849. if (res.data.data && res.data.data.length > 0) {
  850. let arr = res.data.data;
  851. arr.forEach((item) => {
  852. Object.keys(item).forEach((val) => {
  853. if (item[val] == null) {
  854. item[val] = "- -";
  855. }
  856. });
  857. });
  858. this.tableData = arr;
  859. } else {
  860. this.tableData = res.data.data;
  861. }
  862. this.total = res.data.totalRecord;
  863. this.loading = false;
  864. });
  865. },
  866. },
  867. mounted() {
  868. this.getData();
  869. this.getList(this.params, this.pageSize);
  870. },
  871. };
  872. </script>
  873. <style scoped lang="scss">
  874. .radviv div {
  875. width: 80% !important;
  876. }
  877. .pageBox {
  878. text-align: right;
  879. margin-top: 10px;
  880. }
  881. .info-line {
  882. width: 100%;
  883. display: block;
  884. // padding-left: 20px;
  885. div {
  886. width: 50%;
  887. display: inline-block;
  888. }
  889. span {
  890. width: 100px;
  891. display: inline-block;
  892. text-align: right;
  893. font-weight: bold;
  894. font-size: 14px;
  895. padding-right: 15px;
  896. i {
  897. color: red;
  898. display: inline-block;
  899. padding-right: 5px;
  900. }
  901. }
  902. .el-select,
  903. .el-input {
  904. width: calc(100% - 100px);
  905. }
  906. .tree {
  907. width: calc(100% - 100px);
  908. }
  909. }
  910. .online {
  911. width: 100%;
  912. .el-select {
  913. width: calc(100% - 100px);
  914. }
  915. span {
  916. vertical-align: top;
  917. }
  918. .el-textarea {
  919. width: calc(100% - 100px);
  920. }
  921. }
  922. </style>
  923. <style lang="scss" scoped>
  924. .container {
  925. background-color: #f0f2f5;
  926. .clearStyle {
  927. cursor: pointer;
  928. color: #0b82ff;
  929. }
  930. .el-col {
  931. background-color: white;
  932. padding: 0 20px;
  933. }
  934. .container-box {
  935. padding: 0;
  936. margin-top: 0;
  937. height: 100%;
  938. background-color: white;
  939. padding: 20px;
  940. }
  941. .main-box {
  942. overflow: hidden;
  943. display: flex;
  944. background-color: white;
  945. padding: 20px 0;
  946. > div {
  947. background-color: white;
  948. }
  949. .inner-left {
  950. width: 30%;
  951. padding: 0 20px;
  952. border: 1px solid #ddd;
  953. border-radius: 5px;
  954. height: calc(100vh - 220px);
  955. // .canel-style {
  956. // color: #1890ff;
  957. // cursor: pointer;
  958. // padding-left: 10px;
  959. // }
  960. }
  961. .inner-right {
  962. width: 68%;
  963. margin-left: 2%;
  964. overflow-y: auto;
  965. // border-left: 1px solid #ddd;
  966. height: calc(100vh - 220px);
  967. }
  968. }
  969. }
  970. .button-list {
  971. padding: 30px 0 10px 0;
  972. display: flex;
  973. // justify-content: space-between;
  974. }
  975. .choice-style {
  976. background: rgb(255, 255, 255);
  977. }
  978. .tree-action {
  979. bottom: 0;
  980. width: 100%;
  981. // border-top: 1px solid #e8e8e8;
  982. padding: 10px 16px;
  983. text-align: left;
  984. left: 0;
  985. background: #fff;
  986. border-radius: 0 0 2px 2px;
  987. }
  988. .tree-line {
  989. // .el-tree-node__content {
  990. // padding-left: 0 !important;
  991. // }
  992. .el-tree-node__expand-icon.is-leaf {
  993. display: none !important;
  994. }
  995. .el-tree-node {
  996. position: relative;
  997. padding-left: 16px; // 缩进量
  998. }
  999. .el-tree-node__children {
  1000. padding-left: 16px; // 缩进量
  1001. }
  1002. // 竖线
  1003. .el-tree-node::before {
  1004. content: "";
  1005. height: 100%;
  1006. width: 1px;
  1007. position: absolute;
  1008. left: -3px;
  1009. top: -17px;
  1010. border-width: 1px;
  1011. border-left: 1px dashed #52627c;
  1012. }
  1013. // 当前层最后一个节点的竖线高度固定
  1014. .el-tree-node:last-child::before {
  1015. height: 38px; // 可以自己调节到合适数值
  1016. }
  1017. // 横线
  1018. .el-tree-node::after {
  1019. content: "";
  1020. width: 24px;
  1021. height: 20px;
  1022. position: absolute;
  1023. left: -3px;
  1024. top: 20px;
  1025. border-width: 1px;
  1026. border-top: 1px dashed #52627c;
  1027. }
  1028. // 去掉最顶层的虚线,放最下面样式才不会被上面的覆盖了
  1029. & > .el-tree-node::after {
  1030. border-top: none;
  1031. }
  1032. & > .el-tree-node::before {
  1033. border-left: none;
  1034. }
  1035. // 展开关闭的icon
  1036. .el-tree-node__expand-icon {
  1037. font-size: 16px;
  1038. // 叶子节点(无子节点)
  1039. &.is-leaf {
  1040. color: transparent;
  1041. // display: none; // 也可以去掉
  1042. }
  1043. }
  1044. }
  1045. </style>