formTable.vue 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116
  1. <template>
  2. <div>
  3. <div>
  4. <div class="flex-title">需求申请单</div>
  5. <el-form
  6. ref="form"
  7. :model="form"
  8. :rules="rule"
  9. :disabled="disabled"
  10. label-width="200px"
  11. >
  12. <div class="flex-header">
  13. <el-form-item
  14. style="width: 44%"
  15. label="需求名称:"
  16. prop="needName"
  17. label-width="140px"
  18. >
  19. <el-input v-model="form.needName"></el-input>
  20. </el-form-item>
  21. <el-form-item label="申请部门:" prop="applyDept">
  22. <el-input v-model="form.applyDept" :disabled="true"></el-input>
  23. </el-form-item>
  24. <el-form-item label="申请科室:" prop="applyDepartment">
  25. <el-input
  26. v-model="form.applyDepartment"
  27. :disabled="true"
  28. ></el-input>
  29. </el-form-item>
  30. </div>
  31. <div class="flex-header">
  32. <el-form-item label="需求决策编号:">
  33. <el-input v-model="form.needNo" :disabled="true"></el-input>
  34. </el-form-item>
  35. <el-form-item label="需求来源:" prop="needSource">
  36. <el-select v-model="form.needSource" placeholder="请选择">
  37. <el-option
  38. v-for="(item, index) in options"
  39. :label="item.label"
  40. :value="item.label"
  41. :key="index"
  42. ></el-option>
  43. </el-select>
  44. </el-form-item>
  45. <el-form-item label="提出人:" prop="proposer">
  46. <el-input v-model="form.proposer"></el-input>
  47. </el-form-item>
  48. </div>
  49. <div class="flex-input-tare flex-header">
  50. <el-form-item label="需求背景及目的" prop="needBackdrop">
  51. <el-input
  52. type="textarea"
  53. maxlength="300"
  54. show-word-limit
  55. v-model="form.needBackdrop"
  56. ></el-input>
  57. </el-form-item>
  58. </div>
  59. <div class="flex-input-tare flex-header">
  60. <el-form-item label="需求内容" prop="needContent">
  61. <el-input
  62. type="textarea"
  63. maxlength="300"
  64. show-word-limit
  65. v-model="form.needContent"
  66. ></el-input>
  67. </el-form-item>
  68. </div>
  69. <div class="flex-header">
  70. <el-form-item label="重要程度:" prop="importance">
  71. <el-select v-model="form.importance" placeholder="请选择">
  72. <el-option label="重要" value="重要"></el-option>
  73. <el-option label="普通" value="普通"></el-option>
  74. </el-select>
  75. </el-form-item>
  76. <el-form-item
  77. label="是否数智化需求:"
  78. prop="isDigitization"
  79. label-width="200px"
  80. >
  81. <el-select v-model="form.isDigitization" placeholder="请选择">
  82. <el-option label="是" value="是"></el-option>
  83. <el-option label="否" value="否"></el-option>
  84. </el-select>
  85. </el-form-item>
  86. <el-form-item
  87. label="是否七大工程需求:"
  88. prop="isSevenProject"
  89. label-width="220px"
  90. >
  91. <el-select v-model="form.isSevenProject" placeholder="请选择">
  92. <el-option label="是" value="是"></el-option>
  93. <el-option label="否" value="否"></el-option>
  94. </el-select>
  95. </el-form-item>
  96. <el-form-item label="是否需求目录框架需求:" label-width="280px">
  97. <el-select v-model="form.isMarketMeeting" placeholder="请选择">
  98. <el-option label="是" value="是"></el-option>
  99. <el-option label="否" value="否"></el-option>
  100. </el-select>
  101. </el-form-item>
  102. </div>
  103. <div class="flex-header">
  104. <el-form-item label="一级目录:" prop="firstDirectory">
  105. <el-select v-model="form.firstDirectory" placeholder="一级目录">
  106. <el-option
  107. v-for="(item, index) in oneList"
  108. :label="item.categoryName"
  109. :value="item.categoryName"
  110. :key="index"
  111. >{{ item.categoryName }}</el-option
  112. >
  113. </el-select>
  114. </el-form-item>
  115. <el-form-item
  116. label="二级目录:"
  117. v-if="twoStatus"
  118. prop="secondDirectory"
  119. >
  120. <el-select v-model="form.secondDirectory" placeholder="二级目录">
  121. <el-option
  122. v-for="(item, index) in twoList"
  123. :label="item.categoryName"
  124. :value="item.categoryName"
  125. :key="index"
  126. >{{ item.categoryName }}</el-option
  127. >
  128. </el-select>
  129. </el-form-item>
  130. <el-form-item
  131. label="三级目录:"
  132. v-if="threeStatus"
  133. prop="thirdDirectory"
  134. >
  135. <el-select v-model="form.thirdDirectory" placeholder="三级目录">
  136. <el-option
  137. v-for="(item, index) in threeList"
  138. :label="item.categoryName"
  139. :value="item.categoryName"
  140. :key="index"
  141. >{{ item.categoryName }}</el-option
  142. >
  143. </el-select>
  144. </el-form-item>
  145. </div>
  146. <div class="flex-header">
  147. <el-form-item
  148. label="四级目录:"
  149. v-if="fourStatus"
  150. prop="fourthDirectory"
  151. >
  152. <el-select v-model="form.fourthDirectory" placeholder="四级目录">
  153. <el-option
  154. v-for="(item, index) in fourList"
  155. :label="item.categoryName"
  156. :value="item.categoryName"
  157. :key="index"
  158. >{{ item.categoryName }}</el-option
  159. >
  160. </el-select>
  161. </el-form-item>
  162. <el-form-item
  163. label="五级目录:"
  164. v-if="fiveStatus"
  165. prop="fifthDirectory"
  166. >
  167. <el-select v-model="form.fifthDirectory" placeholder="五级目录">
  168. <el-option
  169. v-for="(item, index) in fiveList"
  170. ::label="item.categoryName"
  171. :value="item.categoryName"
  172. :key="index"
  173. >{{ item.categoryName }}</el-option
  174. >
  175. </el-select>
  176. </el-form-item>
  177. <el-form-item label="系统归属:">
  178. <el-input v-model="form.sysBelong" disabled></el-input>
  179. </el-form-item>
  180. </div>
  181. <div class="flex-header">
  182. <el-form-item label="功能开发承载平台:" label-width="200px">
  183. <el-input v-model="form.functionBearPlatform"></el-input>
  184. </el-form-item>
  185. <el-form-item label="功能展示应用平台:" label-width="200px">
  186. <el-input v-model="form.functionShowPlatform"></el-input>
  187. </el-form-item>
  188. </div>
  189. <div class="flex-header">
  190. <el-form-item label="需求类型:" prop="needType">
  191. <el-select
  192. v-model="form.needType"
  193. placeholder="请选择"
  194. @change="changeSelect"
  195. >
  196. <el-option label="功能开发类" value="功能开发类"></el-option>
  197. <el-option label="报表开发类" value="报表开发类"></el-option>
  198. <el-option label="数智类" value="数智类"></el-option>
  199. <el-option
  200. label="功能开发和报表开发类"
  201. value="功能开发和报表开发类"
  202. ></el-option>
  203. </el-select>
  204. </el-form-item>
  205. <el-form-item label="需求功能时效:">
  206. <el-select v-model="form.needAging" placeholder="请选择">
  207. <el-option label="固定时限" value="固定时限"></el-option>
  208. <el-option label="长期有效" value="长期有效"></el-option>
  209. </el-select>
  210. </el-form-item>
  211. <el-form-item label="功能到期时间:">
  212. <el-date-picker
  213. type="date"
  214. :disabled="timeStatus"
  215. placeholder="选择日期"
  216. v-model="form.dueTime"
  217. :picker-options="pickerOptions"
  218. value-format="yyyy-MM-dd"
  219. style="width: 100%"
  220. ></el-date-picker>
  221. </el-form-item>
  222. </div>
  223. <div v-if="functionStatus">
  224. <div class="flex-title" style="color: #0783cd">
  225. 功能开发类,数智类填写
  226. </div>
  227. <div class="flex-header">
  228. <el-form-item label="是否涉及敏感信息:" label-width="200px">
  229. <el-select v-model="form.isSensitiveData" placeholder="请选择">
  230. <el-option label="是" value="是"></el-option>
  231. <el-option label="否" value="否"></el-option>
  232. </el-select>
  233. </el-form-item>
  234. <el-form-item label="敏感信息范围:">
  235. <el-input
  236. v-model="form.sensitiveRange"
  237. :disabled="isSensitiveDataStatus"
  238. ></el-input>
  239. </el-form-item>
  240. </div>
  241. <div class="flex-header">
  242. <el-form-item label="上线配合测试地市:" label-width="200px">
  243. <el-input v-model="form.onlineTestCity"></el-input>
  244. </el-form-item>
  245. </div>
  246. <div class="flex-header">
  247. <el-form-item label="功能完成时间:" label-width="200px">
  248. <el-date-picker
  249. type="date"
  250. placeholder="选择日期"
  251. v-model="form.doneTime"
  252. :picker-options="pickerOptions"
  253. value-format="yyyy-MM-dd"
  254. style="width: 100%"
  255. ></el-date-picker>
  256. </el-form-item>
  257. <el-form-item label="是否需要模糊化:" label-width="200px">
  258. <el-select v-model="form.isVaguev" placeholder="请选择">
  259. <el-option label="是" value="是"></el-option>
  260. <el-option label="否" value="否"></el-option>
  261. </el-select>
  262. </el-form-item>
  263. <el-form-item label="是否需要纳入金库模式:" label-width="280px">
  264. <el-select v-model="form.isVaultMode" placeholder="请选择">
  265. <el-option label="是" value="是"></el-option>
  266. <el-option label="否" value="否"></el-option>
  267. </el-select>
  268. </el-form-item>
  269. </div>
  270. </div>
  271. <div v-if="reportStatus">
  272. <div class="flex-title" style="color: #d93f3f">报表开发类填写</div>
  273. <div class="flex-header">
  274. <el-form-item label="具体业务:">
  275. <el-input v-model="form.justBusiness"></el-input>
  276. </el-form-item>
  277. </div>
  278. <div class="flex-header">
  279. <el-form-item label="展现周期:">
  280. <el-select v-model="form.showCycle" placeholder="请选择">
  281. <el-option label="日" value="日"></el-option>
  282. <el-option label="周" value="周"></el-option>
  283. <el-option label="月" value="月"></el-option>
  284. <el-option label="季度" value="季度"></el-option>
  285. <el-option label="年" value="年"></el-option>
  286. </el-select>
  287. </el-form-item>
  288. <el-form-item label="展现类型:">
  289. <el-select v-model="form.showType" placeholder="请选择">
  290. <el-option label="报表" value="报表"></el-option>
  291. <el-option label="模型" value="模型"></el-option>
  292. <el-option label="明细" value="明细"></el-option>
  293. </el-select>
  294. </el-form-item>
  295. <el-form-item label="数据粒度:">
  296. <el-select v-model="form.dataSize" placeholder="请选择">
  297. <el-option label="统计" value="统计"></el-option>
  298. <el-option label="明细" value="明细"></el-option>
  299. <el-option label="综合" value="综合"></el-option>
  300. </el-select>
  301. </el-form-item>
  302. </div>
  303. </div>
  304. <div
  305. class="flex-header flex-upload"
  306. style="display: flex; flex-direction: column"
  307. >
  308. <el-form-item
  309. label="附件:"
  310. prop="mkFileShareAttachList"
  311. label-width="120px"
  312. >
  313. <my-upload
  314. ref="upload"
  315. @uploadBack="uploadBack"
  316. @delloadBack="delloadBack"
  317. @clickDownload="download"
  318. :fileInfo="fileInfo"
  319. :fileList="list.mkFileShareAttachList"
  320. ></my-upload>
  321. </el-form-item>
  322. <div class="el-upload__tip" slot="tip">
  323. 备注内容:PPT(非市场部需求以及市场部非框架内需求需要通过市场决策会决议,请上传ppt。
  324. </div>
  325. <div class="el-upload__tip" slot="tip">
  326. <a
  327. href="./static/file/a.xlsx"
  328. target="_blank"
  329. download="后评估模板.xlsx"
  330. >《后评估模板.xlsx》、</a
  331. >
  332. <a
  333. target="_blank"
  334. href="./static/file/c.xlsx"
  335. download="业务需求模板.xlsx"
  336. >《业务需求模板.xlsx》、</a
  337. >
  338. <a
  339. target="_blank"
  340. href="./static/file/b.xlsx"
  341. >
  342. target="_blank"
  343. href="./static/file/d.pptx"
  344. download="关于系统开发需求的汇报(第十期).pptx"
  345. >《关于系统开发需求的汇报(第十期).pptx》</a
  346. >
  347. </div>
  348. </div>
  349. <!-- 处理人意见模块 -->
  350. <!-- 流程追踪模块 -->
  351. </el-form>
  352. </div>
  353. <div></div>
  354. <div></div>
  355. </div>
  356. </template>
  357. <script>
  358. import myUpload from "../../../../components/workflowUpload";
  359. export default {
  360. components: {
  361. myUpload,
  362. },
  363. data() {
  364. return {
  365. fileInfo: {
  366. type: "bt1n",
  367. typename: "上传文件",
  368. limit: 5,
  369. url: "/market/waf/upload",
  370. fileList: [],
  371. },
  372. pickerOptions: {
  373. disabledDate(time) {
  374. return time.getTime() < Date.now() - 8.64e7;
  375. },
  376. },
  377. oneList: [],
  378. childrenList: [],
  379. twoList: [],
  380. twoStatus: false,
  381. threeList: [],
  382. threeStatus: false,
  383. fourList: [],
  384. fourStatus: false,
  385. fiveList: [],
  386. fiveStatus: false,
  387. isSensitiveDataStatus: false,
  388. timeStatus: false,
  389. functionStatus: false,
  390. reportStatus: false,
  391. Length: "",
  392. form: {
  393. // needName: "", //需求名称
  394. // applyDept: "", //申请部门
  395. // applyDepartment: "", //申请科室
  396. // proposer: "", //提出人
  397. // needNo: "", //需求决策编号
  398. // line: "", //线条?????
  399. // needSource: "", //需求来源
  400. // needBackdrop: "", //需求背景
  401. // needContent: "", //需求内容
  402. // importance: "", //重要程度
  403. // isDigitization: "", //是否数智化
  404. // isSevenProject: "", //是否七大工程需求
  405. // isMarketMeeting: "", //是否需要通过市场决策会
  406. // first_directory: "", //一级目录
  407. // second_directory: "", //二级目录
  408. // third_directory: "", //三级目录
  409. // fourth_directory: "", //四级目录
  410. // fifth_directory: "", //五级目录
  411. // sys_belong: "", //系统归属
  412. // function_bear_platform: "", //功能开发承载平台
  413. // function_show_platform: "", //功能展示应用平台
  414. // need_type: "", //需求类型
  415. // need_aging: "", //需求功能时效
  416. // due_time: "", //功能到期时间
  417. // is_sensitive_data: "", //是否涉及敏感信息
  418. // sensitive_range: "", //敏感信息范围
  419. // online_test_city: "", //上线配合测试城市
  420. // done_time: "", //期待完成时间
  421. // is_vaguev: "", //是否需要模糊化
  422. // is_vault_mode: "", //是否金库模式
  423. // just_business: "", //具体业务
  424. // show_cycle: "", //展现周期
  425. // show_type: "", //展现类型
  426. // data_size: "", //数据粒度
  427. // append_id: "", //附件id
  428. // state: "", //状态
  429. // dept_person_opinion: "", //部门人员处理意见
  430. // dept_leader_opinion: "", //部门领导处理意见
  431. // market_admin_opinion: "", //市场需求管理员处理意见
  432. },
  433. options: [
  434. {
  435. label: "服务例会",
  436. value: 0,
  437. },
  438. {
  439. label: "业务发展要求",
  440. value: 1,
  441. },
  442. {
  443. label: "市场决策会",
  444. value: 2,
  445. },
  446. {
  447. label: "地市调研",
  448. value: 3,
  449. },
  450. {
  451. label: "涉及考核指标",
  452. value: 4,
  453. },
  454. {
  455. label: "内部优化需求",
  456. value: 5,
  457. },
  458. {
  459. label: "集团公司需求",
  460. value: 6,
  461. },
  462. {
  463. label: "一线员工减负赋能",
  464. value: 7,
  465. },
  466. ],
  467. timeRule: {
  468. doneTime: [
  469. { required: true, message: "请选择正确的时间", trigger: "change" },
  470. ],
  471. },
  472. rules: {
  473. firstDirectory: [
  474. { required: true, message: "请选择一级目录", trigger: "change" },
  475. ],
  476. secondDirectory: [
  477. { required: true, message: "请选择二级目录", trigger: "change" },
  478. ],
  479. thirdDirectory: [
  480. { required: true, message: "请选择三级目录", trigger: "change" },
  481. ],
  482. fourthDirectory: [
  483. { required: true, message: "请选择四级目录", trigger: "change" },
  484. ],
  485. fifthDirectory: [
  486. { required: true, message: "请选择五级目录", trigger: "change" },
  487. ],
  488. },
  489. rule: {
  490. needName: [
  491. { required: true, message: "请输入需求名称", trigger: "blur" },
  492. ],
  493. // mkFileShareAttachList: [
  494. // { required: true, validator: this.validateFiles },
  495. // ],
  496. applyDept: [
  497. { required: true, message: "请输入申请部门", trigger: "blur" },
  498. ],
  499. applyDepartment: [
  500. { required: true, message: "请输入申请课室", trigger: "blur" },
  501. ],
  502. proposer: [
  503. { required: true, message: "请输入提出人", trigger: "blur" },
  504. ],
  505. needSource: [
  506. { required: true, message: "请输入需求来源", trigger: "change" },
  507. ],
  508. needBackdrop: [
  509. { required: true, message: "请输入需求背景", trigger: "blur" },
  510. {
  511. min: 1,
  512. max: 300,
  513. message: "长度在 1 到 300 个字符",
  514. trigger: "blur",
  515. },
  516. ],
  517. needContent: [
  518. { required: true, message: "请输入需求内容", trigger: "blur" },
  519. {
  520. min: 1,
  521. max: 300,
  522. message: "长度在 1 到 300 个字符",
  523. trigger: "blur",
  524. },
  525. ],
  526. importance: [
  527. { required: true, message: "请选择重要程度", trigger: "change" },
  528. ],
  529. isDigitization: [
  530. { required: true, message: "请选择", trigger: "change" },
  531. ],
  532. needType: [
  533. { required: true, message: "请选择需求类型", trigger: "change" },
  534. ],
  535. isSevenProject: [
  536. { required: true, message: "请选择七大工程需求", trigger: "change" },
  537. ],
  538. },
  539. copyRule: {},
  540. isList: [],
  541. };
  542. },
  543. props: {
  544. list: {
  545. type: Object,
  546. default: () => {},
  547. },
  548. disabled: {
  549. type: Boolean,
  550. default: () => {},
  551. },
  552. },
  553. mounted() {
  554. this.copyRule = this.rule;
  555. if (this.list.mkFileShareAttachList) {
  556. this.$refs.upload.attList = this.list.mkFileShareAttachList;
  557. this.list.mkFileShareAttachList.map((item) => {
  558. item.name = item.fileName;
  559. });
  560. }
  561. // console.log(this.$refs.upload);
  562. },
  563. created() {
  564. // console.log(this.list.needName);
  565. // console.log(this.list.mkFileShareAttachList);
  566. // console.log(this.list);
  567. this.getOneList();
  568. this.form = this.list;
  569. // console.log(this.form);
  570. // alert(this.list.mkFileShareAttachList)
  571. // console.log(this.list.mkFileShareAttachList);
  572. this.isList = this.list;
  573. if (this.list.secondDirectory) {
  574. this.twoStatus = true;
  575. }
  576. if (this.list.thirdDirectory) {
  577. this.threeStatus = true;
  578. }
  579. if (this.list.fourthDirectory) {
  580. this.fourStatus = true;
  581. }
  582. if (this.list.fifthDirectory) {
  583. this.fiveStatus = true;
  584. }
  585. },
  586. watch: {
  587. // "list.mkFileShareAttachList": {
  588. // handler(newVal, oldVal) {
  589. // console.log(newVal);
  590. // // this.$refs.upload.$refs.upload.clearFiles();
  591. // // console.log(this.$refs.upload.attList = newVal
  592. // // newVal.map((item) => {
  593. // // item.name = item.fileName;
  594. // // });
  595. // // this.$refs.upload.attList = newVal;
  596. // // this.fileInfo.fileList = newVal.mkFileShareAttachList;
  597. // // console.log(newVal.mkFileShareAttachList);
  598. // },
  599. // },
  600. "form.doneTime": {
  601. handler(newVal) {
  602. if (newVal) {
  603. let changeTime = newVal.toString().replace("/-/g", "/");
  604. let nowTime = new Date(changeTime).getTime();
  605. if (nowTime <= new Date().getTime()) {
  606. this.$message.error("请选择正确的时间");
  607. this.rule = { ...this.rule, ...this.timeRule };
  608. }
  609. }
  610. },
  611. },
  612. "form.isMarketMeeting": {
  613. handler(newVal, oldVal) {
  614. if (newVal === "是") {
  615. this.rule = { ...this.rule, ...this.rules };
  616. } else {
  617. this.rule = this.copyRule;
  618. }
  619. console.log(this.rule);
  620. },
  621. },
  622. "form.needType": {
  623. handler(e, q) {
  624. if (e == "功能开发类" || e == "数智类") {
  625. this.functionStatus = true;
  626. this.reportStatus = false;
  627. } else if (e == "报表开发类") {
  628. this.reportStatus = true;
  629. this.functionStatus = false;
  630. } else {
  631. this.functionStatus = true;
  632. this.reportStatus = true;
  633. }
  634. },
  635. },
  636. "form.isSensitiveData": {
  637. handler(newVal, oldVal) {
  638. if (newVal == "否") {
  639. this.isSensitiveDataStatus = true;
  640. this.form.sensitiveRange = "";
  641. } else {
  642. this.isSensitiveDataStatus = false;
  643. }
  644. },
  645. },
  646. "form.firstDirectory": {
  647. handler(newVal, oldVal) {
  648. this.form.sysBelong = newVal;
  649. if (oldVal) {
  650. if (newVal !== oldVal) {
  651. [
  652. this.form.secondDirectory,
  653. this.form.thirdDirectory,
  654. this.form.fourthDirectory,
  655. this.form.fifthDirectory,
  656. ] = "";
  657. [this.twoList, this.threeList, this.fourList, this.fiveList] = [];
  658. // [this.threeStatus, this.fourStatus, this.fiveStatus] = false;
  659. }
  660. }
  661. this.oneList.map((item) => {
  662. if (newVal === item.categoryName) {
  663. this.getChirdenList(item.id);
  664. }
  665. });
  666. },
  667. },
  668. childrenList: {
  669. handler(newVal) {
  670. switch (newVal[0].layer) {
  671. case 2:
  672. this.twoList = this.childrenList;
  673. if (this.childrenList.length !== 0) {
  674. this.twoStatus = true;
  675. } else {
  676. this.twoList = false;
  677. }
  678. break;
  679. case 3:
  680. this.threeList = this.childrenList;
  681. if (this.childrenList.length !== 0) {
  682. this.threeStatus = true;
  683. } else {
  684. this.threeStatus = false;
  685. }
  686. break;
  687. case 4:
  688. this.fourList = this.childrenList;
  689. if (this.childrenList.length !== 0) {
  690. this.fourStatus = true;
  691. } else {
  692. this.fourStatus = false;
  693. }
  694. break;
  695. case 5:
  696. if (this.childrenList.length !== 0) {
  697. this.fiveStatus = true;
  698. } else {
  699. this.fiveStatus = false;
  700. }
  701. this.fiveList = this.childrenList;
  702. break;
  703. }
  704. },
  705. },
  706. "form.secondDirectory": {
  707. handler(newVal, oldVal) {
  708. if (oldVal) {
  709. if (newVal !== oldVal) {
  710. [
  711. this.form.thirdDirectory,
  712. this.form.fourthDirectory,
  713. this.form.fifthDirectory,
  714. ] = "";
  715. [this.threeList, this.fourList, this.fiveList] = [];
  716. // [this.fourStatus, this.fiveStatus] = false;
  717. // this.fourStatus = false;
  718. }
  719. }
  720. if (newVal !== undefined) {
  721. this.twoList.map((item) => {
  722. if (newVal === item.categoryName) {
  723. this.getChirdenList(item.id);
  724. }
  725. });
  726. } else {
  727. this.threeStatus = false;
  728. this.fourStatus = false;
  729. }
  730. },
  731. },
  732. "form.thirdDirectory": {
  733. handler(newVal, oldVal) {
  734. if (oldVal) {
  735. if (newVal !== oldVal) {
  736. [this.form.fourthDirectory, this.form.fifthDirectory] = "";
  737. [this.fourList, this.fiveList] = [];
  738. // [this.fiveStatus] = false;
  739. }
  740. }
  741. if (newVal !== undefined) {
  742. this.threeList.map((item) => {
  743. if (newVal === item.categoryName) {
  744. this.getChirdenList(item.id);
  745. }
  746. });
  747. } else {
  748. this.fiveStatus = false;
  749. this.fourStatus = false;
  750. }
  751. },
  752. },
  753. "form.fourthDirectory": {
  754. handler(newVal, oldVal) {
  755. if (oldVal) {
  756. if (newVal !== oldVal) {
  757. [this.form.fifthDirectory] = "";
  758. [this.fiveList] = [];
  759. this.fiveStatus = false;
  760. }
  761. }
  762. console.log(newVal);
  763. console.log(this.fourList);
  764. if (newVal !== undefined) {
  765. this.fourList.map((item) => {
  766. if (newVal === item.categoryName) {
  767. this.getChirdenList(item.id);
  768. }
  769. });
  770. }
  771. },
  772. },
  773. // 'form.fifthDirectory':{
  774. // handler(newVal){
  775. // if(this.isList.fifthDirectory){
  776. // this.fiveStatus = true
  777. // }
  778. // }
  779. // },
  780. // 'list':{
  781. // handler(newVal,oldVal){
  782. // console.log(newVal)
  783. // }
  784. // },
  785. "form.needAging": {
  786. handler(newVal, oldVal) {
  787. if (newVal == "长期有效") {
  788. this.timeStatus = true;
  789. this.form.dueTime = "";
  790. } else {
  791. this.timeStatus = false;
  792. }
  793. },
  794. },
  795. },
  796. methods: {
  797. disableDate(time) {
  798. return time.getTime() < Date.now() - 8.64e7;
  799. },
  800. validateFiles(rule, value, callback) {
  801. let num = 3;
  802. let nameList = [
  803. "业务需求模板.xlsx",
  804. "后评估模板.xlsx",
  805. "敏感信息范围说明.xlsx",
  806. ];
  807. let files = this.$refs.upload.attList;
  808. // if (
  809. // (this.form.isMarketMeeting !== "是" &&
  810. // this.form.applyDept === "市场经营部") ||
  811. // (this.form.applyDept !== "信息技术中心" &&
  812. // this.form.applyDept !== "市场经营部")
  813. // ) {
  814. // num++;
  815. // }
  816. if (!files.length || files.length < num) {
  817. callback(new Error("请上传正确的模板数量!"));
  818. } else {
  819. let arrList = [];
  820. for (let task of nameList) {
  821. let newList = files.find((item) => {
  822. return item.name === task;
  823. // }
  824. });
  825. arrList.push(newList);
  826. }
  827. // files.map((item) => {
  828. // let fileIndex = item.name.lastIndexOf(".");
  829. // let substrName = item.name.substr(fileIndex);
  830. // if (substrName == ".pptx") {
  831. // arrList.push(item);
  832. // }
  833. // });
  834. // if (
  835. // (this.form.isMarketMeeting !== "是" &&
  836. // this.form.applyDept === "市场经营部") ||
  837. // (this.form.applyDept !== "信息技术中心" &&
  838. // this.form.applyDept !== "市场经营部")
  839. // ) {
  840. // let pptList = arrList.filter((item) => {
  841. // let fileIndex = item.name.lastIndexOf(".");
  842. // let substrName = item.name.substr(fileIndex);
  843. // return substrName == ".pptx";
  844. // });
  845. // if (!pptList.length) {
  846. // callback(new Error("请上传ppt!"));
  847. // }
  848. // }
  849. arrList.map((item) => {
  850. //excel命名错误
  851. if (item === undefined) {
  852. callback(new Error("请按备注中模板名称命名!"));
  853. }
  854. });
  855. }
  856. callback();
  857. },
  858. clickLLength(e) {
  859. if (e !== 0) {
  860. this.Length = true;
  861. } else {
  862. this.Length = false;
  863. }
  864. },
  865. clickSelect(e) {},
  866. uploadBack(v) {
  867. if (this.form.mkFileShareAttachList) {
  868. this.form.mkFileShareAttachList = [];
  869. this.form.mkFileShareAttachList = v;
  870. } else {
  871. let mkFileShareAttachList = [];
  872. mkFileShareAttachList = v;
  873. this.$set(this.form, "mkFileShareAttachList", mkFileShareAttachList);
  874. }
  875. },
  876. delloadBack(v) {
  877. this.form.mkFileShareAttachList = v;
  878. this.$http({
  879. url: "/market/waf/update",
  880. method: "post",
  881. headers: {
  882. "Content-Type": "application/json",
  883. },
  884. data: this.form,
  885. }).then((res) => {
  886. console.log(res);
  887. // if (res.data.result === 0) {
  888. // this.$message.success("工作流更新成功");
  889. // }
  890. });
  891. },
  892. download() {
  893. if (this.form.mkFileShareAttachList.length > 1) {
  894. this.$http({
  895. url: "/market/CMKFile/downAllFile",
  896. method: "post",
  897. headers: {
  898. "Content-Type": "application/json",
  899. },
  900. responseType: "blob",
  901. data: { mkFileShareAttachList: this.form.mkFileShareAttachList },
  902. }).then((response) => {
  903. if (window.navigator && window.navigator.msSaveOrOpenBlob) {
  904. let blob = new Blob([response.data], {
  905. type: "application/vnd.ms-excel",
  906. });
  907. window.navigator.msSaveOrOpenBlob(
  908. blob,
  909. new Date().getTime().toString() + ".zip"
  910. );
  911. } else {
  912. /* 火狐谷歌的文件下载方式 */
  913. var blob = new Blob([response.data]);
  914. var downloadElement = document.createElement("a");
  915. var href = window.URL.createObjectURL(blob);
  916. downloadElement.href = href;
  917. downloadElement.download = this.form.needName + ".zip";
  918. document.body.appendChild(downloadElement);
  919. downloadElement.click();
  920. document.body.removeChild(downloadElement);
  921. window.URL.revokeObjectURL(href);
  922. }
  923. if (this.infolist.authType === "3") {
  924. this.dialogCli(10);
  925. }
  926. });
  927. } else {
  928. let list = {
  929. id: this.form.mkFileShareAttachList[0].fileCode,
  930. fileName: this.form.mkFileShareAttachList[0].fileName,
  931. };
  932. this.$http({
  933. url: "/market/waf/downFile",
  934. method: "post",
  935. headers: {
  936. "Content-Type": "application/json",
  937. },
  938. responseType: "blob",
  939. data: list,
  940. }).then((response) => {
  941. console.log(response);
  942. if (window.navigator && window.navigator.msSaveOrOpenBlob) {
  943. let blob = new Blob([response.data], {
  944. type: "application/vnd.ms-excel",
  945. });
  946. //window.navigator.msSaveOrOpenBlob(blob, this.form.needName);
  947. window.navigator.msSaveOrOpenBlob(
  948. blob,
  949. this.form.mkFileShareAttachList[0].fileName
  950. );
  951. } else {
  952. /* 火狐谷歌的文件下载方式 */
  953. var blob = new Blob([response.data]);
  954. var downloadElement = document.createElement("a");
  955. var href = window.URL.createObjectURL(blob);
  956. downloadElement.href = href;
  957. downloadElement.download =
  958. this.form.mkFileShareAttachList[0].fileName;
  959. document.body.appendChild(downloadElement);
  960. downloadElement.click();
  961. document.body.removeChild(downloadElement);
  962. window.URL.revokeObjectURL(href);
  963. }
  964. });
  965. }
  966. },
  967. //上传文件钩子函数
  968. clickUpload(file) {},
  969. //下载文件
  970. downExcel() {
  971. this.$http({
  972. url: "/market/waf/downLoadTemp",
  973. method: "post",
  974. headers: {
  975. "Content-Type": "application/json",
  976. },
  977. responseType: "blob",
  978. data: {},
  979. }).then((response) => {
  980. if (window.navigator && window.navigator.msSaveOrOpenBlob) {
  981. let blob = new Blob([response.data], {
  982. type: "application/vnd.ms-excel",
  983. });
  984. window.navigator.msSaveOrOpenBlob(blob, "需求申请单.zip");
  985. } else {
  986. /* 火狐谷歌的文件下载方式 */
  987. var blob = new Blob([response.data]);
  988. var downloadElement = document.createElement("a");
  989. var href = window.URL.createObjectURL(blob);
  990. downloadElement.href = href;
  991. downloadElement.download = "12312312.zip";
  992. document.body.appendChild(downloadElement);
  993. downloadElement.click();
  994. document.body.removeChild(downloadElement);
  995. window.URL.revokeObjectURL(href);
  996. }
  997. });
  998. },
  999. changeSelect(e) {},
  1000. getOneList() {
  1001. this.$http({
  1002. url: "/market/category/getCategoryLevel1",
  1003. method: "post",
  1004. headers: {
  1005. "Content-Type": "application/json",
  1006. },
  1007. data: {},
  1008. }).then((res) => {
  1009. this.oneList = res.data;
  1010. });
  1011. },
  1012. async getChirdenList(e) {
  1013. await this.$http({
  1014. url: "/market/category/getChildListById",
  1015. method: "post",
  1016. headers: {
  1017. "Content-Type": "application/json",
  1018. },
  1019. data: { id: e },
  1020. }).then((res) => {
  1021. this.childrenList = res.data;
  1022. this.clickLLength(res.data.length);
  1023. });
  1024. },
  1025. },
  1026. };
  1027. </script>
  1028. <style lang="scss" scoped>
  1029. a {
  1030. text-decoration: none;
  1031. }
  1032. ::v-deep .el-upload-list {
  1033. width: 23rem;
  1034. }
  1035. .flex-title {
  1036. text-align: center;
  1037. font-size: 24px;
  1038. line-height: 60px;
  1039. font-weight: bold;
  1040. }
  1041. .flex-header {
  1042. margin-top: 20px;
  1043. display: flex;
  1044. // justify-content: space-between;
  1045. ::v-deep .el-form-item {
  1046. width: 20%;
  1047. margin-right: 60px;
  1048. }
  1049. }
  1050. .flex-upload {
  1051. ::v-deep .el-form-item {
  1052. width: 100%;
  1053. }
  1054. }
  1055. .flex-input-tare {
  1056. ::v-deep .el-form-item {
  1057. width: 100%;
  1058. margin-right: 5%;
  1059. }
  1060. ::v-deep .el-form-item__label {
  1061. width: 9rem !important;
  1062. }
  1063. }
  1064. .el-upload__tip {
  1065. color: red;
  1066. }
  1067. // ::v-deep .el-input--suffix .el-input__inner {
  1068. // width: 119% !important;
  1069. // }
  1070. ::v-deep .el-input__inner {
  1071. color: black !important;
  1072. }
  1073. ::v-deep .el-textarea.is-disabled .el-textarea__inner {
  1074. color: black !important;
  1075. }
  1076. ::v-deep .el-form-item {
  1077. display: flex;
  1078. }
  1079. ::v-deep .el-form-item__label {
  1080. // width:100%;
  1081. height: 50px;
  1082. line-height: 40px !important;
  1083. width: 130px;
  1084. font-size: 0.5rem;
  1085. }
  1086. ::v-deep .el-form-item__content {
  1087. width: 100%;
  1088. margin-left: 0% !important;
  1089. }
  1090. .el-select,
  1091. ::v-deep.el-input_inner {
  1092. width: 100%;
  1093. }
  1094. ::v-deep.el-form-item.foldLabel .el-form-item__label {
  1095. white-space: pre-line; /*换行显示*/
  1096. height: 10px; /*设置lable高度,input高度一样*/
  1097. line-height: 30px !important;
  1098. }
  1099. </style>