addPage.vue 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459
  1. <template>
  2. <div class="selfInspectionManagement-addPage">
  3. <div class="title-max-box">
  4. <p class="title-p">{{addType?'开始检查':'编辑详情'}}</p>
  5. <p class="title-button add-button-one-90" @click="outButton">返回</p>
  6. <img class="position-img" v-if="imgType == 1" src="@/assets/ZDimages/safetyCheck/icon_xyxc_qx.png">
  7. <img class="position-img" v-if="imgType == 2" src="@/assets/ZDimages/safetyCheck/icon_xyxc_sys.png">
  8. <img class="position-img" v-if="imgType == 3" src="@/assets/ZDimages/safetyCheck/icon_xyxc_xy.png">
  9. </div>
  10. <div class="content-max-box scrollbar-box">
  11. <el-form :model="addForm" :rules="rules" label-width="82px">
  12. <div class="top-form-box">
  13. <div class="top-form-left-box">
  14. <el-form-item label="计划标题" prop="data1">
  15. <el-input disabled v-model="addForm.data1" placeholder="未填写" maxLength="10" style="width: 690px"/>
  16. </el-form-item>
  17. <div style="display: flex">
  18. <el-form-item label="学院" prop="data2">
  19. <el-input disabled v-model="addForm.data2" placeholder="未填写" maxLength="10" style="width: 300px"/>
  20. </el-form-item>
  21. <el-form-item label="实验室" prop="data3" label-width="110px">
  22. <el-input disabled v-model="addForm.data3" placeholder="未填写" maxLength="10" style="width: 280px"/>
  23. </el-form-item>
  24. </div>
  25. <el-form-item label="检查要求" prop="data4">
  26. <el-input disabled v-model="addForm.data4" placeholder="未填写" maxLength="10" style="width: 690px"/>
  27. </el-form-item>
  28. <el-form-item label="检查结果" prop="data5">
  29. <el-select v-model="addForm.data5" placeholder="请选择检查结果" style="width: 690px">
  30. <el-option :key="0" label="不符合" :value="0"></el-option>
  31. <el-option :key="1" label="符合" :value="1"></el-option>
  32. </el-select>
  33. </el-form-item>
  34. <el-form-item label="整改通知" prop="data6">
  35. <el-radio-group v-model="addForm.data6" style="margin-top:5px;">
  36. <el-radio :label="0">整改告知书</el-radio>
  37. <el-radio :label="1">整改通知书</el-radio>
  38. </el-radio-group>
  39. </el-form-item>
  40. </div>
  41. <div class="top-form-right-box">
  42. <el-form-item label="检查类型" prop="data7">
  43. <el-input disabled v-model="addForm.data7" placeholder="未填写" maxLength="10" style="width: 450px"/>
  44. </el-form-item>
  45. <el-form-item label="楼栋" prop="data8">
  46. <el-input disabled v-model="addForm.data8" placeholder="未填写" maxLength="10" style="width: 450px"/>
  47. </el-form-item>
  48. <el-form-item label="计划周期" prop="data9">
  49. <el-input disabled v-model="addForm.data9" placeholder="未填写" maxLength="10" style="width: 450px"/>
  50. </el-form-item>
  51. <el-form-item label="整改期限" prop="data10">
  52. <el-date-picker
  53. style="width: 450px"
  54. v-model="addForm.data10"
  55. type="date"
  56. :clearable="false"
  57. placeholder="选择整改期限">
  58. </el-date-picker>
  59. </el-form-item>
  60. </div>
  61. </div>
  62. <div class="bottom-form-box">
  63. <div class="bottom-form-title-box">
  64. <p>不符合项</p>
  65. <p>隐患数:{{addForm.rectificationList.length}}</p>
  66. </div>
  67. <div class="for-max-big-box" v-for="(item,index) in addForm.rectificationList" :key="index">
  68. <div class="for-title-box">
  69. <p class="for-title-p">第{{index+1}}隐患项</p>
  70. <div class="for-del-box">
  71. <p class="el-icon-delete"></p>
  72. <p>删除此项</p>
  73. </div>
  74. <div class="for-button-box" @click="dataLookButton(item)">
  75. <p :class="item.lookType?'el-icon-arrow-up':'el-icon-arrow-down'"></p>
  76. <p>{{item.lookType?'收起':'展开'}}</p>
  77. </div>
  78. </div>
  79. <div class="for-big-box" v-if="item.lookType">
  80. <el-form-item label="隐患等级" :prop="'rectificationList.'+index+'.list1'" :rules="rules.list1" label-width="123px">
  81. <el-select v-model="item.list1" clearable placeholder="请选择隐患等级" style="width: 408px">
  82. <el-option :key="0" label="一般隐患" :value="0"></el-option>
  83. <el-option :key="1" label="重大隐患" :value="1"></el-option>
  84. <el-option :key="2" label="管理问题" :value="2"></el-option>
  85. </el-select>
  86. </el-form-item>
  87. <el-form-item label="检查项目" :prop="'rectificationList.'+index+'.list2'" :rules="rules.list2" label-width="123px">
  88. <el-cascader
  89. v-model="item.list2"
  90. style="width: 898px"
  91. placeholder="请选择检查项"
  92. :options="options"
  93. filterable></el-cascader>
  94. </el-form-item>
  95. <el-form-item label="检查要点" label-width="123px">
  96. <el-input
  97. style="width: 898px"
  98. type="textarea"
  99. :autosize="{ minRows: 6, maxRows: 6}"
  100. placeholder="请输入检查要点"
  101. resize="none"
  102. maxlength="100"
  103. show-word-limit
  104. v-model="item.list3">
  105. </el-input>
  106. </el-form-item>
  107. <el-form-item label="隐患描述" :prop="'rectificationList.'+index+'.list4'" :rules="rules.list4" label-width="123px">
  108. <el-input
  109. style="width: 898px"
  110. type="textarea"
  111. :autosize="{ minRows: 4, maxRows: 4}"
  112. placeholder="请输入隐患描述"
  113. resize="none"
  114. maxlength="100"
  115. show-word-limit
  116. v-model="item.list4">
  117. </el-input>
  118. </el-form-item>
  119. <el-form-item label="隐患照片" label-width="123px">
  120. <div class="for-img-box" v-for="(img,imgIndex) in item.imgList" :key="imgIndex">
  121. <img class="for-img" :src="img.url">
  122. <p class="for-del-button el-icon-circle-close" @click="delImg(index,imgIndex)"></p>
  123. </div>
  124. <el-upload
  125. style="display: inline-block;overflow: hidden"
  126. class="avatar-uploader"
  127. :action="uploadImgUrl"
  128. :show-file-list="false"
  129. :on-success="(res)=>handleAvatarSuccess(res,item)"
  130. :headers="headers"
  131. :before-upload="(res)=>beforeAvatarUpload(res,item)">
  132. <p class="el-icon-plus up-img-p" style="display: inline-block"></p>
  133. </el-upload>
  134. </el-form-item>
  135. <el-form-item label="" label-width="123px" style="margin-bottom:40px;">
  136. <p>支持jpg/png/bmp/gif格式,且不超过2M,最多上传5张</p>
  137. </el-form-item>
  138. </div>
  139. </div>
  140. <p class="add-bottom-button" @click="addObject">+新增隐患检查项</p>
  141. </div>
  142. </el-form>
  143. </div>
  144. <div class="bottom-button-max-box">
  145. <p></p>
  146. <p class="reset-button-one">取消</p>
  147. <p class="add-button-two-90">保存</p>
  148. <p class="inquire-button-one">提交</p>
  149. </div>
  150. </div>
  151. </template>
  152. <script>
  153. import { getToken } from "@/utils/auth";
  154. export default {
  155. name: 'addPage',
  156. data(){
  157. return{
  158. uploadImgUrl: this.uploadUrl(), // 上传的图片服务器地址
  159. headers: {
  160. Authorization: "Bearer " + getToken(),
  161. },
  162. //新增-编辑
  163. addType:true,
  164. imgType:1,
  165. options:[{value:'zhinan',label:'指南',children:[{value:'shejiyuanze',label:'设计原则',children:[{value:'yizhi',label:'一致'},{value:'fankui',label:'反馈'},{value:'xiaolv',label:'效率'},{value:'kekong',label:'可控'}]},{value:'daohang',label:'导航',children:[{value:'cexiangdaohang',label:'侧向导航'},{value:'dingbudaohang',label:'顶部导航'}]}]},{value:'zujian',label:'组件',children:[{value:'basic',label:'Basic',children:[{value:'layout',label:'Layout 布局'},{value:'color',label:'Color 色彩'},{value:'typography',label:'Typography 字体'},{value:'icon',label:'Icon 图标'},{value:'button',label:'Button 按钮'}]},{value:'form',label:'Form',children:[{value:'radio',label:'Radio 单选框'},{value:'checkbox',label:'Checkbox 多选框'},{value:'input',label:'Input 输入框'},{value:'input-number',label:'InputNumber 计数器'},{value:'select',label:'Select 选择器'},{value:'cascader',label:'Cascader 级联选择器'},{value:'switch',label:'Switch 开关'},{value:'slider',label:'Slider 滑块'},{value:'time-picker',label:'TimePicker 时间选择器'},{value:'date-picker',label:'DatePicker 日期选择器'},{value:'datetime-picker',label:'DateTimePicker 日期时间选择器'},{value:'upload',label:'Upload 上传'},{value:'rate',label:'Rate 评分'},{value:'form',label:'Form 表单'}]},{value:'data',label:'Data',children:[{value:'table',label:'Table 表格'},{value:'tag',label:'Tag 标签'},{value:'progress',label:'Progress 进度条'},{value:'tree',label:'Tree 树形控件'},{value:'pagination',label:'Pagination 分页'},{value:'badge',label:'Badge 标记'}]},{value:'notice',label:'Notice',children:[{value:'alert',label:'Alert 警告'},{value:'loading',label:'Loading 加载'},{value:'message',label:'Message 消息提示'},{value:'message-box',label:'MessageBox 弹框'},{value:'notification',label:'Notification 通知'}]},{value:'navigation',label:'Navigation',children:[{value:'menu',label:'NavMenu 导航菜单'},{value:'tabs',label:'Tabs 标签页'},{value:'breadcrumb',label:'Breadcrumb 面包屑'},{value:'dropdown',label:'Dropdown 下拉菜单'},{value:'steps',label:'Steps 步骤条'}]},{value:'others',label:'Others',children:[{value:'dialog',label:'Dialog 对话框'},{value:'tooltip',label:'Tooltip 文字提示'},{value:'popover',label:'Popover 弹出框'},{value:'card',label:'Card 卡片'},{value:'carousel',label:'Carousel 走马灯'},{value:'collapse',label:'Collapse 折叠面板'}]}]},{value:'ziyuan',label:'资源',children:[{value:'axure',label:'Axure Components'},{value:'sketch',label:'Sketch Templates'},{value:'jiaohu',label:'组件交互文档'}]}],
  166. addForm:{
  167. data1:"asdasdasd",
  168. data5:0,
  169. data6:0,
  170. rectificationList:[
  171. {
  172. lookType:true,
  173. imgList:[],
  174. }
  175. ],
  176. },
  177. //上传用名称保存
  178. upDataName:"",
  179. // 表单校验
  180. rules: {
  181. list1: [
  182. { required: true, message: "请选择隐患等级", trigger: "change" },
  183. ],
  184. list2: [
  185. { required: true, message: "请选择检查项目", trigger: "change" },
  186. ],
  187. list4: [
  188. { required: true, message: "请输入隐患描述", trigger: "change" },
  189. { required: true, message: "请输入隐患描述", validator: this.spaceJudgment, trigger: "change" },
  190. ],
  191. },
  192. }
  193. },
  194. created(){},
  195. mounted(){},
  196. methods:{
  197. //返回事件
  198. outButton(){
  199. this.$parent.goAddPage(1);
  200. },
  201. // 删除图片
  202. delImg(index,imgIndex){
  203. this.addForm.rectificationList[index].imgList.splice(imgIndex,1);
  204. },
  205. //收起/展开
  206. dataLookButton(item){
  207. item.lookType = !item.lookType
  208. },
  209. //新增检查
  210. addObject(){
  211. if(this.addForm.rectificationList.length<10){
  212. let obj = {
  213. lookType:true,
  214. imgList:[],
  215. };
  216. this.addForm.rectificationList.push(obj);
  217. }
  218. },/*==========上传相关==========*/
  219. handleAvatarSuccess(res,item) {
  220. if(item.imgList.length>4){
  221. this.msgError('最多只可上传5张')
  222. return
  223. }
  224. let suffixName= this.upDataName.split('.')[this.upDataName.split('.').length - 2]
  225. //判断文件名中是否有逗号和分号
  226. if(suffixName.indexOf(',')==-1 && suffixName.indexOf(';')==-1){
  227. }else{
  228. this.msgError('文件名里包含逗号或分号,请修改后重新上传!')
  229. return
  230. }
  231. let obj ={
  232. name:this.upDataName,
  233. url:res.data.url,
  234. };
  235. item.imgList.push(obj);
  236. this.$forceUpdate()
  237. },
  238. beforeAvatarUpload(file,item) {
  239. if(item.imgList.length>4){
  240. this.msgError('最多只可上传5张')
  241. return false
  242. }
  243. let type = false;
  244. if (file.type == 'image/png' || file.type == 'image/jpeg' || file.type == 'image/gif' || file.type == 'image/bmp') {
  245. if(file.size> 2000000){
  246. this.msgError('上传图片大小不能超过2M')
  247. return false
  248. }
  249. this.upDataName = file.name;
  250. type = true;
  251. }else{
  252. this.msgError('png/jpeg/gif格式')
  253. type = false;
  254. }
  255. return type;
  256. },
  257. }
  258. }
  259. </script>
  260. <style scoped lang="scss">
  261. .selfInspectionManagement-addPage{
  262. flex: 1;
  263. display: flex !important;
  264. flex-direction: column;
  265. overflow: hidden;
  266. *{
  267. font-weight:500;
  268. }
  269. .title-max-box{
  270. position: relative;
  271. height:90px;
  272. display: flex;
  273. border-bottom:1px solid #dedede;
  274. .title-p{
  275. flex:1;
  276. color:#0045AF;
  277. margin-left:64px;
  278. line-height:90px;
  279. font-size:16px;
  280. }
  281. .title-button{
  282. width:70px;
  283. margin:24px 31px;
  284. }
  285. .position-img{
  286. width:80px;
  287. height:80px;
  288. position: absolute;
  289. top:0;
  290. left:0;
  291. }
  292. }
  293. .content-max-box{
  294. flex:1;
  295. display: flex;
  296. flex-direction: column;
  297. .top-form-box{
  298. padding:40px 85px 20px;
  299. display: flex;
  300. .top-form-left-box{
  301. height:317px;
  302. width:770px;
  303. margin-right:90px;
  304. }
  305. .top-form-right-box{
  306. height:317px;
  307. width:534px;
  308. }
  309. }
  310. .bottom-form-box{
  311. .bottom-form-title-box{
  312. background: #F5F5F5;
  313. display: flex;
  314. margin-bottom:31px;
  315. p{
  316. font-size:16px;
  317. line-height:50px;
  318. }
  319. p:nth-child(1){
  320. color:#333;
  321. margin-left:30px;
  322. flex:1;
  323. }
  324. p:nth-child(2){
  325. color:#0183FA;
  326. margin-right:37px;
  327. }
  328. }
  329. .add-bottom-button{
  330. cursor: pointer;
  331. color:#0183FA;
  332. border-radius:4px;
  333. border:1px dashed #0183FA;
  334. width:800px;
  335. line-height:40px;
  336. text-align: center;
  337. font-size:14px;
  338. margin: 20px auto;
  339. }
  340. }
  341. }
  342. .for-max-big-box{
  343. border:1px solid #dedede;
  344. overflow: hidden;
  345. margin:0 81px;
  346. .for-title-box{
  347. display: flex;
  348. background: #F5F5F5;
  349. border-bottom:1px solid #dedede;
  350. line-height:50px;
  351. .for-title-p{
  352. color:#333333;
  353. font-size:16px;
  354. margin-left: 30px;
  355. flex:1;
  356. }
  357. .for-del-box{
  358. color:#0183FA;
  359. margin-left:46px;
  360. cursor: pointer;
  361. display: flex;
  362. p{
  363. font-size:14px;
  364. line-height:50px;
  365. margin-right:8px;
  366. }
  367. }
  368. .for-button-box{
  369. color:#0183FA;
  370. margin-left:46px;
  371. margin-right:43px;
  372. cursor: pointer;
  373. display: flex;
  374. p{
  375. font-size:14px;
  376. line-height:50px;
  377. margin-right:8px;
  378. }
  379. }
  380. }
  381. .for-big-box{
  382. height:540px;
  383. padding-top:27px;
  384. .up-img-p{
  385. height:80px;
  386. width:80px;
  387. line-height:80px;
  388. text-align: center;
  389. font-size:16px;
  390. border-radius:4px;
  391. border:1px dashed #E0E0E0;
  392. }
  393. .for-img-box{
  394. width:80px;
  395. height:80px;
  396. border-radius:4px;
  397. display: inline-block;
  398. overflow: hidden;
  399. margin-right:20px;
  400. position: relative;
  401. .for-img{
  402. width:80px;
  403. height:80px;
  404. display: inline-block;
  405. overflow: hidden;
  406. }
  407. .for-del-button{
  408. background: rgba(0,0,0,0.7);
  409. width:20px;
  410. height:20px;
  411. line-height: 20px;
  412. text-align: center;
  413. color:#fff;
  414. border-bottom-left-radius:4px;
  415. cursor: pointer;
  416. position: absolute;
  417. top:0;
  418. right:0;
  419. }
  420. }
  421. }
  422. }
  423. .bottom-button-max-box{
  424. height:80px;
  425. display: flex;
  426. border-top:1px solid #dedede;
  427. p{
  428. margin-top:20px;
  429. }
  430. p:nth-child(1){
  431. flex:1;
  432. }
  433. p:nth-child(2){
  434. width:90px;
  435. margin-right:20px;
  436. }
  437. p:nth-child(3){
  438. width:90px;
  439. margin-right:20px;
  440. }
  441. p:nth-child(4){
  442. width:90px;
  443. margin-right:20px;
  444. }
  445. }
  446. }
  447. ::v-deep .is-disabled{
  448. .el-input__inner{
  449. background-color: #f5f5f5;
  450. color: #333;
  451. border-color: #f5f5f5;
  452. cursor:auto;
  453. }
  454. }
  455. </style>