changefillword.html 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649
  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0"/>
  6. <meta name="format-detection" content="telephone=no,email=no,date=no,address=no">
  7. <title></title>
  8. <link rel="stylesheet" type="text/css" href="../../css/aui.css" />
  9. <style>
  10. body{
  11. background: #fff;
  12. }
  13. .api_layout{
  14. padding: 15px;
  15. }
  16. .column{
  17. margin-bottom: 10px;
  18. }
  19. .column-title{
  20. display: block;
  21. font-size: 15px;
  22. color: #97a3b4;
  23. margin-bottom: 10px;
  24. }
  25. input::placeholder{
  26. font-size: 14px;
  27. color: #333;
  28. }
  29. .api_layout .font-s{
  30. font-size: 14px;
  31. }
  32. .api_layout .input-s{
  33. height: 40px;
  34. border: 1px solid #97a3b4;
  35. -webkit-border-radius: 5px;
  36. -moz-border-radius: 5px;
  37. border-radius: 5px;
  38. padding-left: 10px;
  39. }
  40. .aui-list-item-input1{
  41. position: relative;
  42. }
  43. .aui-list-item-input1:after{
  44. content:"";
  45. border-left:5px solid transparent;
  46. border-right:5px solid transparent;
  47. border-bottom:5px solid #b3c0ce;
  48. -webkit-transform-origin:5px 2.5px;
  49. transform-origin:5px 2.5px;
  50. -webkit-transition: all .5s ease;
  51. transition: all .5s ease;
  52. position:absolute;
  53. right:10px;
  54. top:18px;
  55. -webkit-transform:rotate(180deg);
  56. transform:rotate(180deg);
  57. }
  58. .column-textarea{
  59. border: 1px solid #97a3b4;
  60. -webkit-border-radius: 5px;
  61. -moz-border-radius: 5px;
  62. border-radius: 5px;
  63. padding: 10px;
  64. height: 160px;
  65. }
  66. .column-textarea::placeholder{
  67. font-size: 14px;
  68. color: #333;
  69. }
  70. .aui-row{
  71. border: 1px dashed #c8d2de;
  72. -webkit-border-radius: 5px;
  73. -moz-border-radius: 5px;
  74. border-radius: 5px;
  75. padding: 10px;
  76. }
  77. .technological-process{
  78. margin-top: 10px;
  79. display: flex;
  80. justify-content: flex-start;
  81. flex-wrap: wrap;
  82. }
  83. .col{
  84. color: red;
  85. font-size: 14px;
  86. display: inline-flex;
  87. justify-content: space-between;
  88. align-items: center;
  89. flex-wrap: wrap;
  90. padding-right: 10px;
  91. /*width: 25%;*/
  92. }
  93. .name{
  94. border: 1px solid red;
  95. display: block;
  96. padding: 3px 6px;
  97. -webkit-border-radius: 5px;
  98. -moz-border-radius: 5px;
  99. border-radius: 5px;
  100. margin-bottom: 5px;
  101. }
  102. .name:last-child{
  103. margin-bottom: 0;
  104. }
  105. .ico-j{
  106. display: block;
  107. width: 15px;
  108. height: 15px;
  109. background: url("../../image/Arrow.png") no-repeat;
  110. background-size: contain;
  111. margin-left: 10px;
  112. }
  113. .col:last-child{
  114. padding-right: 0;
  115. }
  116. .col:last-child .ico-j{
  117. display: none;
  118. }
  119. .technologicals{
  120. margin-bottom: 20px;
  121. }
  122. .aui-list-item-input label{
  123. font-size: 14px;
  124. height: 21px;
  125. display: inline-block;
  126. line-height: 22px;
  127. margin-right: 5px;
  128. }
  129. .aui-list-item-input label:last-child{
  130. margin-right: 0;
  131. }
  132. .imgParent img{
  133. width: 104px;
  134. height: 104px;
  135. border-radius: 5px;
  136. }
  137. .api-toast{
  138. width: 100%;
  139. height: 100%;
  140. position: fixed;
  141. top: 0;
  142. left: 0;
  143. background: rgba(0,0,0,.5);
  144. }
  145. </style>
  146. </head>
  147. <body>
  148. <div class="api_layout">
  149. <div class="column-row" id="column_row">
  150. <!-- <div class="column">
  151. <label class="column-title">选择:</label>
  152. <div class="aui-list-item-input1">
  153. <select class="input-select font-s input-s" name="xuanze">
  154. <option value="">请选择</option>
  155. <option value="你好">你好</option>
  156. </select>
  157. </div>
  158. </div>
  159. <div class="column">
  160. <label class="column-title">申请部门:</label>
  161. <div class="aui-list-item-input1">
  162. <select class="input-select font-s input-s" name="xuanze1">
  163. <option value="">请选择</option>
  164. <option value="你好1">你好1</option>
  165. </select>
  166. </div>
  167. </div> -->
  168. <!-- <div class="column">
  169. <label class="column-title">上传图片:</label>
  170. <div class="aui-row aui-row-padded">
  171. <div class="aui-col-xs-4" id="upload">
  172. <img src="../../image/upload.png"/>
  173. <input type="file" name="" value="">
  174. </div>
  175. </div>
  176. </div> -->
  177. </div>
  178. <div class="technologicals" id="technologicals">
  179. <!-- <label class="column-title">固定审批流程:</label>
  180. <div class="technological-process">
  181. <div class="col">
  182. <div class="name_list">
  183. <span class="name">张三你</span>
  184. </div>
  185. <i class="ico-j"></i>
  186. </div>
  187. <div class="col">
  188. <div class="name_list">
  189. <span class="name">张三你</span>
  190. <span class="name">张三</span>
  191. </div>
  192. <i class="ico-j"></i>
  193. </div>
  194. <div class="col">
  195. <div class="name_list">
  196. <span class="name">张三你</span>
  197. </div>
  198. <i class="ico-j"></i>
  199. </div>
  200. </div> -->
  201. </div>
  202. <div class="aui-btn aui-btn-info aui-btn-block" onclick="submitInfo()">
  203. 提交
  204. </div>
  205. </div>
  206. </body>
  207. <script type="text/template" id="template">
  208. {{ for (var i = 0;i<it.length;i++) { }}
  209. {{? it[i].type == 'input'}}
  210. <div class="column">
  211. <label class="column-title">{{=it[i].label}}:</label>
  212. <input type="text" name="{{=it[i].name}}" value="" placeholder="请输入{{=it[i].label}}" class="inputBox colimn-input input-s font-s">
  213. </div>
  214. {{?? it[i].type == 'radio'}}
  215. <div class="column">
  216. <label class="column-title">{{=it[i].label}}:</label>
  217. <div class="aui-list-item-input radioName" name="{{=it[i].name}}" data-info>
  218. {{ for(var j=0;j<it[i].select.length;j++) { }}
  219. <label><input class="aui-radio" type="radio" name="{{=it[i].name}}" value="{{=it[i].select[j]}}" onchange="radioFun(this)">{{=it[i].select[j]}}</label>
  220. {{ } }}
  221. </div>
  222. </div>
  223. {{?? it[i].type == 'checkbox'}}
  224. <div class="column">
  225. <label class="column-title">{{=it[i].label}}:</label>
  226. <div class="aui-list-item-input checkboxName" name={{=it[i].name}} data-info>
  227. {{ for(var j=0;j<it[i].select.length;j++) { }}
  228. <label><input class="aui-checkbox" type="checkbox" name="{{=it[i].name}}" value="{{=it[i].select[j]}}" onchange="checkboxFun(this)">{{=it[i].select[j]}}</label>
  229. {{ } }}
  230. </div>
  231. </div>
  232. {{?? it[i].type == 'textarea'}}
  233. <div class="column">
  234. <label class="column-title">{{=it[i].label}}:</label>
  235. <textarea name="{{=it[i].name}}" rows="8" cols="80" class="column-textarea font-s column-textarea1" placeholder="请输入{{=it[i].label}}"></textarea>
  236. </div>
  237. {{?? it[i].type == 'select'}}
  238. <div class="column">
  239. <label class="column-title">选择:</label>
  240. <div class="aui-list-item-input1">
  241. <select class="input-select font-s input-s" name="{{=it[i].name}}">
  242. <option value="">请选择</option>
  243. {{ for(var j=0;j<it[i].select.length;j++) { }}
  244. <option value="{{=it[i].select[j]}}">{{=it[i].select[j]}}</option>
  245. {{ } }}
  246. </select>
  247. </div>
  248. </div>
  249. {{?? it[i].type == 'images'}}
  250. <div class="column">
  251. <label class="column-title">{{=it[i].label}}:</label>
  252. <div class="aui-row aui-row-padded uploadImg" data-info name="{{=it[i].name}}">
  253. <div class="aui-col-xs-4 imgParent" onclick="actionSheetFun(this)" data-url='{{=it[i].url}}'>
  254. <img src="../../image/upload.png"/>
  255. </div>
  256. </div>
  257. </div>
  258. {{?? it[i].type == 'files'}}
  259. <div class="column">
  260. <label class="column-title">{{=it[i].label}}:</label>
  261. <div class="aui-row aui-row-padded uploadFile" data-info name="{{=it[i].name}}">
  262. <div class="aui-col-xs-4" onclick="browseFile()" data-url='{{=it[i].url}}'>
  263. <img src="../../image/upload.png"/>
  264. <input type="file">
  265. </div>
  266. </div>
  267. </div>
  268. {{?}}
  269. {{ } }}
  270. </script>
  271. <script type="text/template" id="templateApply">
  272. <label class="column-title">固定审批流程:</label>
  273. <div class="technological-process">
  274. {{ for(var prop in it) { }}
  275. <div class="col">
  276. <div class="name_list">
  277. {{ for (var j = 0;j<it[prop].length;j++) { }}
  278. <span class="name">{{=it[prop][j].name}}</span>
  279. {{ } }}
  280. </div>
  281. <i class="ico-j"></i>
  282. </div>
  283. {{ } }}
  284. </div>
  285. </script>
  286. <script type="text/javascript" src="../../script/api.js"></script>
  287. <script type="text/javascript" src="../../script/doT.min.js"></script>
  288. <script src="../../script/Hammer.js" charset="utf-8"></script>
  289. <script type="text/javascript" src="../../script/config.js"></script>
  290. <script type="text/javascript">
  291. var toast = new auiToast(),token;
  292. var UIAlbumBrowser;
  293. var i = 0;
  294. var imgarr = [];
  295. var id = ""
  296. apiready = function(){
  297. var info = $api.getStorage('data');
  298. token = JSON.parse(info).data.access_token;
  299. id = api.pageParam.id;
  300. getApplyDe(api.pageParam.id,token);
  301. UIAlbumBrowser = api.require('UIAlbumBrowser');
  302. };
  303. function getApplyDe(id,token) {
  304. var headers = {
  305. "Authorization": "Bearer " + token
  306. };
  307. $http.fnReuestData(UrlRouter.getApplyD+id,headers,'get','',function (ret,err) {
  308. toast.hide();
  309. api.setTabLayoutAttr({
  310. title: ret.data.title
  311. });
  312. console.log(JSON.stringify(ret));
  313. $apis.append(column_row,'#template',ret.data.form);
  314. $apis.append(technologicals,'#templateApply',ret.data.flow);
  315. })
  316. }
  317. function approValPesonal() {
  318. api.openFrame({
  319. name: 'approvalPersonal',
  320. bounces: false,
  321. url: 'approvalPersonal.html',
  322. bgColor:'rgba(0,0,0,.6)',
  323. rect: {
  324. x: 0,
  325. y: 0,
  326. w: api.winWidth,
  327. h: 'auto',
  328. },
  329. // pageParam: {
  330. // username: name,
  331. // mobile:phone,
  332. // avatar:img,
  333. // delp:del
  334. // }
  335. });
  336. }
  337. // 上传图片
  338. var headImg;
  339. // function actionSheetFun() {
  340. // api.actionSheet({
  341. // title: '选择',
  342. // cancelTitle: '取消',
  343. // buttons: ['相机','相册']
  344. // }, function(ret, err) {
  345. // if (ret.buttonIndex !=3) {
  346. // var type = 'camera';
  347. // if(ret.buttonIndex == 1){
  348. // type = 'camera';
  349. // }else {
  350. // type = 'album';
  351. // }
  352. // api.getPicture({
  353. // sourceType: type
  354. // }, function(ret, err){
  355. // if(ret){
  356. // uploadHead(ret.data)
  357. // headImg = ret.data;
  358. // }
  359. // });
  360. // }
  361. // });
  362. // }
  363. function actionSheetFun(el) {
  364. api.actionSheet({
  365. title: '选择',
  366. cancelTitle: '取消',
  367. buttons: ['相机','相册']
  368. }, function(ret, err) {
  369. if (ret.buttonIndex !=3) {
  370. var type = 'camera';
  371. if(ret.buttonIndex == 1){
  372. type = 'camera';
  373. api.getPicture({
  374. sourceType: type
  375. }, function(ret, err){
  376. if(ret && ret.data!=""){
  377. uploadHead(el,ret.data);
  378. }
  379. });
  380. }else {
  381. type = 'album';
  382. // 支持多图片上传,UIAlbumBrowser模块获取图片路径
  383. changeImageUrl(el)
  384. }
  385. }
  386. });
  387. }
  388. // upload img
  389. function uploadHead(el,imgUrl){
  390. var uploadUrl = $api.attr(el, 'data-url');
  391. toast.loading({
  392. title: "上传中",
  393. duration: 2000
  394. });
  395. console.log(imgarr,'imgarr1');
  396. api.ajax({
  397. url: urlphp+uploadUrl,
  398. method: 'post',
  399. headers : {
  400. "Authorization": "Bearer " + token,
  401. },
  402. data: {
  403. files: {
  404. image:imgUrl
  405. }
  406. }
  407. },function(ret, err){
  408. if (ret) {
  409. toast.hide();
  410. if(ret.code === 0){
  411. var data = JSON.stringify(ret.data)
  412. var html = `<div class="aui-col-xs-4 imgParent" data-imgData="${data}" onclick="delImg(this)">
  413. <img src="${ret.data.path}"/>
  414. </div>`;
  415. var getAttribute = el.parentNode.getAttribute('data-info');
  416. var dataInfo = getAttribute+',,'+JSON.stringify(ret.data)
  417. el.parentNode.setAttribute('data-info',dataInfo);
  418. $api.append(el.parentNode,html);
  419. api.toast({
  420. msg: '上传成功',
  421. duration: 2000,
  422. location: 'top'
  423. });
  424. }else {
  425. api.toast({
  426. msg: '上传失败',
  427. duration: 2000,
  428. location: 'top'
  429. });
  430. }
  431. } else {
  432. toast.hide();
  433. api.toast({
  434. msg: '网络错误',
  435. duration: 2000,
  436. location: 'top'
  437. });
  438. }
  439. });
  440. }
  441. // radio
  442. function radioFun(el) {
  443. var value = el.value;
  444. if(el.checked){
  445. el.parentNode.parentNode.setAttribute('data-info',value);
  446. }
  447. }
  448. // chexkbox
  449. function checkboxFun(el) {
  450. var value = el.value;
  451. if(el.checked){
  452. var getAttribute = el.parentNode.parentNode.getAttribute('data-info').split(',');
  453. getAttribute.push(value);
  454. el.parentNode.parentNode.setAttribute('data-info',getAttribute);
  455. }else {
  456. var getAttribute = el.parentNode.parentNode.getAttribute('data-info').split(',');
  457. getAttribute.remove(value);
  458. el.parentNode.parentNode.setAttribute('data-info',getAttribute);
  459. }
  460. }
  461. // 选择图片库路径
  462. function changeImageUrl(el) {
  463. UIAlbumBrowser.imagePicker({
  464. max: 9,
  465. styles: {
  466. bg: '#000000',
  467. //cameraImg: 'widget://res/cameraImg.png',
  468. mark: {
  469. position: 'top_right',
  470. size: 20
  471. },
  472. nav: {
  473. bg: '#000000',
  474. cancelColor: '#fff',
  475. cancelSize: 16,
  476. nextStepColor: '#7fff00',
  477. nextStepSize: 16
  478. },
  479. thumbnail: { //(可选项)返回的缩略图配置,**建议本图片不要设置过大** 若已有缩略图,则使用已有的缩略图。若要重新生成缩略图,可先调用清除缓存接口api.clearCache()。
  480. w: 100, //(可选项)数字类型;返回的缩略图的宽;默认:原图的宽度
  481. h: 100 //(可选项)数字类型;返回的缩略图的宽;默认:原图的高度
  482. }
  483. },
  484. animation: true,
  485. }, function(ret) {
  486. if (ret.eventType == 'nextStep') {
  487. if (ret.list && ret.list.length > 0) {
  488. imgarr = ret.list;
  489. UIAlbumBrowser_transPath(el);
  490. }
  491. UIAlbumBrowser.closePicker();
  492. }
  493. if (ret.originalPath && ret.originalPath.length > 0) {
  494. uploadHead(el,ret.originalPath)
  495. }
  496. });
  497. }
  498. // 转换缩略图路径 ios
  499. function UIAlbumBrowser_transPath(el) {
  500. UIAlbumBrowser.transPath({
  501. path: imgarr[i].path
  502. }, function(ret, err) {
  503. if (ret) {
  504. i++;
  505. if (i < imgarr.length) {
  506. UIAlbumBrowser_transPath(el);
  507. } else {
  508. i = 0;
  509. }
  510. uploadHead(el,ret.path)
  511. }
  512. });
  513. }
  514. // 长安删除图片或者文件
  515. // var hammertime = new Hammer(document.getElementsByClassName('Longpress'));
  516. // hammertime.on('press', function(ev) {
  517. // console.log(JSON.stringify(ev));
  518. // });
  519. // 上传文件
  520. function uploadFile(el,fileUrl) {
  521. var uploadUrl = $api.attr(el, 'data-url');
  522. console.log(uploadUrl,'uploadUrl');
  523. api.ajax({
  524. url: urlphp+'api/worksheet/design/up_files',
  525. method: 'post',
  526. headers : {
  527. "Authorization": "Bearer " + token,
  528. },
  529. data: {
  530. files: {
  531. file:fileUrl
  532. }
  533. }
  534. },function(ret, err){
  535. console.log(JSON.stringify(ret));
  536. if (ret) {
  537. toast.hide();
  538. if(ret.code === 0){
  539. api.toast({
  540. msg: '上传成功',
  541. duration: 2000,
  542. location: 'top'
  543. });
  544. }else {
  545. api.toast({
  546. msg: '上传失败',
  547. duration: 2000,
  548. location: 'top'
  549. });
  550. }
  551. } else {
  552. toast.hide();
  553. api.toast({
  554. msg: '网络错误',
  555. duration: 2000,
  556. location: 'top'
  557. });
  558. }
  559. });
  560. }
  561. // 浏览文件,获取文件路径
  562. function browseFile(el) {
  563. var fileBrowser = api.require('fileBrowser');
  564. fileBrowser.skin({
  565. skin:0,
  566. });
  567. fileBrowser.open(function(ret) {
  568. if (ret) {
  569. console.log(JSON.stringify(ret));
  570. uploadFile(el,ret.url)
  571. fileBrowser.close();
  572. }
  573. });
  574. // var selectFile = api.require('selectFile');
  575. // selectFile.open(function(ret, err){
  576. // if(ret.status){
  577. // uploadFile(el,ret.path)
  578. // alert(JSON.stringify(ret.path));
  579. // }else{
  580. // alert('选择文件不存在');
  581. // }
  582. // });
  583. }
  584. // 提交工单信息
  585. function submitInfo() {
  586. var headers = {
  587. "Authorization": "Bearer " + token
  588. };
  589. var inputBoxArray= [],inputBoxObject = {id:id,otherFlow:[]},inputBox = $api.domAll('.inputBox'),inputSelect = $api.domAll('.input-select'),
  590. checkboxName = document.querySelectorAll('.checkboxName'),radioName = $api.domAll('.radioName'),uploadImg = $api.domAll('.uploadImg'),columnTextarea = $api.domAll('.column-textarea');
  591. // 文本框
  592. for (var i = 0; i < inputBox.length;i++){
  593. var key = $api.attr(inputBox[i],'name'), value = $api.val(inputBox[i]);
  594. inputBoxObject[key] = value
  595. // console.log(JSON.stringify(inputBoxObject));
  596. }
  597. // 文本域
  598. for (var i = 0; i < columnTextarea.length;i++){
  599. var key = $api.attr(columnTextarea[i],'name'), value = $api.val(columnTextarea[i]);
  600. inputBoxObject[key] = value
  601. // console.log(JSON.stringify(inputBoxObject));
  602. }
  603. // 下拉选择
  604. for (var j = 0; j < inputSelect.length; j++) {
  605. var key = $api.attr(inputSelect[j],'name'), value = $api.val(inputSelect[j]);
  606. inputBoxObject[key] = value;
  607. }
  608. // 单选
  609. for (var k = 0; k < radioName.length; k++) {
  610. var val = $api.attr(radioName[k],'data-info'),key = $api.attr(radioName[k],'name');
  611. inputBoxObject[key] = val;
  612. }
  613. // 多选
  614. for (var t = 0; t < checkboxName.length; t++) {
  615. var value =checkboxName[t].getAttribute('data-info'),key = checkboxName[t].getAttribute('name');
  616. inputBoxObject[key] = value.split(',').slice(1).join(',');
  617. }
  618. // img
  619. for (var i = 0; i < uploadImg.length; i++) {
  620. var value = $api.attr(uploadImg[i],'data-info'),key = $api.attr(uploadImg[i],'name');
  621. var imageArr = [];
  622. for (var j = 0; j < value.split(',,').slice(1).length; j++) {
  623. imageArr.push(value.split(',,').slice(1)[j])
  624. }
  625. inputBoxObject[key] = imageArr.join(',');
  626. }
  627. console.log(JSON.stringify(inputBoxObject));
  628. $http.fnReuestDataJSON(UrlRouter.submitApply,headers,'post',inputBoxObject,function (ret,err) {
  629. toast.hide()
  630. if (ret.code === 0) {
  631. api.toast({
  632. msg: '提交成功',
  633. duration: 2000,
  634. location: 'top'
  635. });
  636. }
  637. console.log(JSON.stringify(ret));
  638. console.log(JSON.stringify(err));
  639. })
  640. // $event.openWin('myWordeOrder_win','myWordeOrder_win','','');
  641. };
  642. // 删除图片
  643. function delImg(el) {
  644. var Imgdata = el.getAttribute('data-imgData');
  645. console.log(JSON.stringify(Imgdata))
  646. }
  647. </script>
  648. </html>