DataRightsApp.js 39 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151
  1. var DataRightsApp = angular.module('DataRightsApp', [ 'baseServices' ]);
  2. DataRightsApp.service('dataRightsService', ['$http','$jsonToFormData','BaseService', function($http,$jsonToFormData,BaseService) {
  3. var service = {
  4. init:function($scope){
  5. /**
  6. * 控件类型。 16是隐藏域 4 用户单选,8,用户多选, 17,角色单选,5,角色多选, 18,组织单选,6,组织多选 19,岗位单选,7,岗位多选
  7. */
  8. this.scope = $scope;
  9. $scope.controlList = [{key : '1',value : '单行文本框'}, {key : '15',value : '日期控件'}, {key : '3',value : '数据字典'}, {key : '11',value : '下拉选项'}, {key : '4',value : '人员选择器(单选)'}, {key : '17',value : '角色选择器(单选)'}, {key : '18',value : '组织选择器(单选)'}, {key : '19',value : '岗位选择器(单选)'}];
  10. $scope.bpmFormTable = [];
  11. $scope.displayFields = [];
  12. $scope.conditionFields = [];
  13. $scope.sortFields = [];
  14. $scope.filterFields = [];
  15. $scope.manageFields = [];
  16. $scope.exportFileds = [];
  17. $scope.dataRightsJson = DataRightsJson;
  18. $scope.sqlButtons = parseToJson($scope.dataRightsJson.sqlButtons);
  19. this.initDataRightsJson(DataRightsJson);
  20. switch($scope.type){
  21. case "sysQueryView":
  22. this.initSysQueryViewData(bpmFormTableJSON);
  23. break;
  24. default :
  25. $scope.bpmFormTable = bpmFormTableJSON;
  26. break;
  27. }
  28. console.info($scope.dataRightsJson.displayField);
  29. if($scope.dataRightsJson.displayField)
  30. $scope.displayFields = parseToJson($scope.dataRightsJson.displayField);
  31. if($scope.dataRightsJson.conditionField)
  32. $scope.conditionFields = parseToJson($scope.dataRightsJson.conditionField);
  33. else if($scope.dataRightsJson.conditions)
  34. $scope.conditionFields = parseToJson($scope.dataRightsJson.conditions);
  35. if($scope.dataRightsJson.sortField)
  36. $scope.sortFields = parseToJson($scope.dataRightsJson.sortField);
  37. if($scope.dataRightsJson.filterField)
  38. $scope.filterFields = parseToJson($scope.dataRightsJson.filterField);
  39. if($scope.dataRightsJson.manageField)
  40. $scope.manageFields = parseToJson($scope.dataRightsJson.manageField);
  41. else if($scope.dataRightsJson.buttons)
  42. $scope.manageFields = parseToJson($scope.dataRightsJson.buttons);
  43. if($scope.dataRightsJson.exportField)
  44. $scope.exportFileds = parseToJson($scope.dataRightsJson.exportField);
  45. $scope.ctlOptions = [ {k : "1",v : "单行文本框"},{k : "15",v : "日期控件"} ,{k : "3",v : "数据字典"} ,{k : "11",v : "下拉选项"} ,{k : "4",v : "人员选择器(单选)"},{k : "17",v : "角色选择器(单选)"},{k : "18",v : "组织选择器(单选)"},{k : "19",v : "岗位选择器(单选)"} ];
  46. $scope.managerButtons = [{k:"add",v:"新增"},{k:"edit",v:"编辑"},{k:"del",v:"删除"},{k:"detail",v:"明细"},{k:"export",v:"导出"},{k:"import",v:"导入"},{k:"start",v:"启动流程"},{k:"reStart",v:"重启流程"}]
  47. $scope.getOptions = function(ty){
  48. var ops = [];
  49. switch (ty) {
  50. case 'varchar' :
  51. ops = [{k : "1",v : "="},{k : "2",v : "!="},{k : "3",v : "like"}];
  52. break;
  53. case 'number' :
  54. case 'int' :
  55. ops = [{k : "1",v : "="},{k : "2",v : ">"},{k : "3",v : "<"},{k : "4",v : ">="},{k : "5",v : "<="}];
  56. break;
  57. case 'date' :
  58. ops = [{k : "1",v : "="},{k : "2",v : ">"},{k : "3",v : "<"},{k : "4",v : ">="},{k : "5",v : "<="},{k : "6",v : "日期范围"}];
  59. break;
  60. default :
  61. ops = [{k : "1",v : "="},{k : "2",v : ">"},{k : "3",v : "<"},{k : "4",v : ">="},{k : "5",v : "<="}];
  62. break;
  63. }
  64. return ops;
  65. }
  66. },
  67. getOperateOptions : function(type){
  68. var ops = [];
  69. switch (type) {
  70. case 'varchar' :
  71. ops = [{k : "1",v : "等于"},{k : "2",v : "不等于"},{k : "4",v : "like"},{k : "5",v : "like_l"},{k : "6",v : "like_r"},{k:"7",v:"in"}];
  72. break;
  73. case 'number' :
  74. case 'int' :
  75. ops = [{k : "1",v : "等于"},{k : "2",v : "不等于"},{k : "3",v : "大于"},{k : "4",v : "大于等于"},{k : "5",v : "小于"},{k : "6",v : "小于等于"},{k:"7",v:"in"},{k : "8",v : "between"},{k:"9",v:"not in"}];
  76. break;
  77. case 'date' :
  78. ops = [{k : "1",v : "等于"},{k : "2",v : "不等于"},{k : "3",v : "大于"},{k : "4",v : "大于等于"},{k : "5",v : "小于"},{k : "6",v : "小于等于"},{k : "7",v : "between"}];
  79. break;
  80. default :
  81. ops = [{k : "1",v : "等于"},{k : "2",v : "不等于"},{k : "3",v : "大于"},{k : "4",v : "大于等于"},{k : "5",v : "小于"},{k : "6",v : "小于等于"}];
  82. break;
  83. }
  84. return ops;
  85. },
  86. initSysQueryViewData:function(bpmFormTableJSON){
  87. var scope = this.scope,
  88. fieldList = [],
  89. displayList = [];
  90. for(var i = 0 ; i < bpmFormTableJSON.length ; i++){
  91. if(bpmFormTableJSON[i].isSearch)
  92. fieldList.push(bpmFormTableJSON[i]);
  93. if(bpmFormTableJSON[i].isShow){
  94. delete bpmFormTableJSON[i].alarmSetting;
  95. delete bpmFormTableJSON[i].controlContent;
  96. delete bpmFormTableJSON[i].resultFrom;
  97. bpmFormTableJSON[i].sortAble = 0;
  98. bpmFormTableJSON[i].defaultSort = 0;
  99. bpmFormTableJSON[i].frozen = 0;
  100. bpmFormTableJSON[i].sortSeq = "asc";
  101. bpmFormTableJSON[i].align = "left";
  102. displayList.push(bpmFormTableJSON[i]);
  103. }
  104. }
  105. scope.bpmFormTable = {
  106. fieldList : fieldList
  107. }
  108. var tempDiaplayFields = "";
  109. if(displayFields&&displayFields.length>0){
  110. for(var i = 0 ; i < displayFields.length ; i++){
  111. var df = displayFields[i];
  112. if(!df) continue;
  113. var hasShowRights = false;
  114. for(var j = 0 ; j < displayList.length ; j++) {
  115. if(df.fieldName == displayList[j].name) {
  116. df.name = displayList[j].name;
  117. df.fieldDesc = displayList[j].fieldDesc;
  118. df.isVirtual = displayList[j].isVirtual;
  119. hasShowRights = true;
  120. break;
  121. }
  122. }
  123. if(hasShowRights){
  124. tempDiaplayFields = tempDiaplayFields ||[];
  125. tempDiaplayFields.push(df);
  126. }
  127. }
  128. }
  129. scope.filterFields = {
  130. type:DataRightsJson.filterType||2,
  131. sql:(DataRightsJson.filterType==2||DataRightsJson.filterType==3)?DataRightsJson.filter:"",
  132. conditions:DataRightsJson.filterType==1?parseToJson(DataRightsJson.filter):""
  133. }
  134. if(DataRightsJson.supportGroup == 1){
  135. var groupingView = parseToJson(DataRightsJson.groupSetting),
  136. groupSummary = groupingView.groupSummary,
  137. groupField = groupingView.groupField,
  138. groupColumnShow = groupingView.groupColumnShow,
  139. groupText = groupingView.groupText,
  140. groupOrder = groupingView.groupOrder;
  141. scope.groupingView = [];
  142. for(var i = 0 ; i < groupField.length ; i++){
  143. var isInDisplayFields = false;
  144. for(var j = 0 ; j < displayFields.length ; j++){
  145. if(displayFields[j].fieldName == groupField[i]){
  146. displayFields[j].gchecked = true;
  147. isInDisplayFields = true;
  148. break;
  149. }
  150. }
  151. if(isInDisplayFields)
  152. scope.groupingView.push({
  153. groupField:groupField[i],
  154. groupColumnShow:groupColumnShow[i]?1:0,
  155. groupSummary:groupSummary[i]?1:0,
  156. groupText:groupText[i],
  157. groupOrder:groupOrder[i]
  158. })
  159. }
  160. }
  161. scope.displayFields = tempDiaplayFields||displayList;
  162. scope.allDisplayFields = displayList;
  163. scope.sysQueryMetaFields = bpmFormTableJSON;
  164. },
  165. isCheckboxNull : function(data){
  166. return data!= 0 && data!= 1;
  167. },
  168. initDataRightsJson : function(dataRightsJson){
  169. if(!dataRightsJson.pageSize)
  170. dataRightsJson.pageSize = 20;
  171. if(this.isCheckboxNull(dataRightsJson.isQuery))
  172. dataRightsJson.isQuery = 0;
  173. if(this.isCheckboxNull(dataRightsJson.initQuery))
  174. dataRightsJson.initQuery = 0;
  175. if(this.isCheckboxNull(dataRightsJson.showRowsNum))
  176. dataRightsJson.showRowsNum = 0;
  177. },
  178. manageFieldValid : function(list){
  179. if(!list) return false;
  180. var name =new Array();
  181. for(var i = 0 ; i < list.length ; i++){
  182. name.push(list[i].name);
  183. }
  184. return this.isRepeat(name);
  185. },
  186. isRepeat : function (arr) {
  187. var hash = {};
  188. for(var i in arr) {
  189. if(hash[arr[i]]) {
  190. return true;
  191. }
  192. hash[arr[i]] = true;
  193. }
  194. return false;
  195. },
  196. selectCondition : function(type) {
  197. var _self = this.scope,
  198. list = _self.bpmFormTable.fieldList,
  199. service = _self.service;
  200. if(!_self.conditionFields) _self.conditionFields=[];
  201. switch(type){
  202. case 'sysQueryView':
  203. for(var f in list){
  204. if(list[f].checked&&!this.hasInList(list[f].fieldName||list[f].name,_self.conditionFields,'name')){
  205. var condition = {
  206. name : list[f].fieldName|| list[f].name,
  207. type : list[f].fieldType|| list[f].type||list[f].dataType,
  208. operate : "1",
  209. valueFrom : "1"
  210. };
  211. if(condition.type == "date"){
  212. condition.format = list[f].dateFormat||"yyyy-MM-dd"
  213. }
  214. _self.conditionFields.push(condition);
  215. }
  216. }
  217. break;
  218. default:
  219. for(var f in list){
  220. if(list[f].checked&&!this.hasInList(list[f].fieldName||list[f].name,_self.conditionFields,'na')){
  221. var condition = {
  222. na : list[f].fieldName|| list[f].name,
  223. ty : list[f].fieldType|| list[f].type,
  224. op : 1,
  225. cm : list[f].fieldDesc,
  226. va : "",
  227. vf : 1,
  228. ct : list[f].controlType,
  229. qt : this.getQueryType(list[f].fieldType|| list[f].type,1)
  230. };
  231. _self.conditionFields.push(condition);
  232. }
  233. }
  234. break;
  235. }
  236. },
  237. hasInList:function(na,list,tag){
  238. for(var i in list){
  239. if(list[i][tag]==na)
  240. return true;
  241. }
  242. return false;
  243. },
  244. /**
  245. * 选择排序的字段
  246. */
  247. selectSort : function(listKey,nameKey,descKey) {
  248. var _self = this.scope,
  249. list = _self.bpmFormTable.fieldList,
  250. service = _self.service;
  251. if(listKey)
  252. list = _self.bpmFormTable[listKey];
  253. nameKey = nameKey||"fieldName";
  254. descKey = descKey||"fieldDesc";
  255. if(!_self.sortFields) _self.sortFields = [];
  256. for(var f in list){
  257. if(list[f].checked&&!this.hasInList(list[f][nameKey],_self.sortFields,'name')){
  258. var condition = {
  259. name : list[f][nameKey],
  260. desc : list[f][descKey]
  261. };
  262. _self.sortFields.push(condition);
  263. }
  264. }
  265. },
  266. addManage : function() {
  267. this.scope.manageFields = this.scope.manageFields||[];
  268. var list = this.scope.manageFields;
  269. var mf = {desc:"新增",name:"新增"}
  270. if(!this.noRights)
  271. mf.right = [{type:"none"}];
  272. list.push(mf);
  273. },
  274. /**
  275. * 增加过滤条件
  276. */
  277. addFilter : function() {
  278. var _self = this,bt = this.scope.dataRightsJson;
  279. var right = {type : 'none',id : '',name : '',script : ''};
  280. this.filterDialog({
  281. key : bt.tableId||bt.tableName,
  282. source : bt.source,
  283. callback : function(rtn) {
  284. if (rtn) {
  285. var filter = {},type= rtn.type,condition = (type==2?rtn.condition:JSON2.stringify(rtn.condition));
  286. filter.name = rtn.name;
  287. filter.key = rtn.key;
  288. filter.type = type;
  289. filter.condition = condition;
  290. filter.right = [right];
  291. if(!_self.scope.filterFields) _self.scope.filterFields = [];
  292. _self.scope.filterFields.push(filter);
  293. _self.scope.$digest();
  294. }
  295. }
  296. });
  297. },
  298. /**
  299. * 过滤的窗口
  300. */
  301. filterDialog : function(conf) {
  302. var dialogWidth = 750;
  303. var dialogHeight = 500;
  304. conf = $.extend({}, {dialogWidth : dialogWidth,dialogHeight : dialogHeight,help : 0,status : 0,scroll : 0,center : 1}, conf);
  305. var url = this.scope.filterUrl + conf.key;
  306. url = url.getNewUrl();
  307. var that =this;
  308. DialogUtil.open({
  309. height:conf.dialogHeight,
  310. width: conf.dialogWidth,
  311. title : '过滤的窗口',
  312. url: url,
  313. isResize: true,
  314. //自定义参数
  315. conf: conf,
  316. sucCall:function(rtn){
  317. if (rtn && conf.callback) {
  318. conf.callback.call(that, rtn);
  319. }
  320. }
  321. });
  322. },
  323. /**
  324. * 编辑过滤条件窗口
  325. */
  326. editFilterDialog : function(list,idx) {
  327. var _self = this,bt = this.scope.dataRightsJson;
  328. this.filterDialog({
  329. key : bt.tableId||bt.tableName,
  330. source : bt.source,
  331. filter : list[idx],
  332. callback : function(rtn) {
  333. if (rtn) {
  334. var condition = (rtn.type==2?rtn.condition:JSON2.stringify(rtn.condition));
  335. list[idx].name = rtn.name;
  336. list[idx].key = rtn.key;
  337. list[idx].type = rtn.type;
  338. list[idx].condition = rtn.condition;
  339. this.scope.$digest();
  340. }
  341. }
  342. });
  343. },
  344. delTr : function(list,idx) {
  345. list.splice(idx,1);
  346. },
  347. moveTr : function(list,idx,isUp) {
  348. idx = parseInt(idx);
  349. if((isUp&&idx==0)||(!isUp&&idx==list.length-1)) return;
  350. if (isUp) {
  351. var t=list[idx-1];
  352. list[idx-1]=list[idx];
  353. list[idx]=t;
  354. } else {
  355. var t=list[idx+1];
  356. list[idx+1]=list[idx];
  357. list[idx]=t;
  358. }
  359. },
  360. getQueryType : function(type, op) {
  361. var qt = "S";
  362. switch (type) {
  363. case 'varchar' :
  364. if (op) {
  365. switch (op) {
  366. case 1 :
  367. case 2 :
  368. qt = 'S';
  369. break
  370. case 3 :
  371. qt = 'SL';
  372. break
  373. case 4 :
  374. qt = 'SLL';
  375. break
  376. case 5 :
  377. qt = 'SLR';
  378. break
  379. default :
  380. qt = 'S';
  381. break
  382. }
  383. }
  384. break;
  385. case 'number' :
  386. qt = 'L';
  387. break;
  388. case 'int' :
  389. qt = 'N';
  390. break;
  391. case 'date' :
  392. if (op == 6)
  393. qt = 'DR';
  394. else
  395. qt = 'DL';
  396. break;
  397. default :
  398. qt = 'S';
  399. break;
  400. }
  401. return qt;
  402. },
  403. setSysQueryViewJson:function(json){
  404. if(this.scope.type == 'sysQueryView'){
  405. var obj = this.scope.dataRightsJson;
  406. json.conditions = json.conditionField;
  407. json.buttons = json.manageField;
  408. json.initQuery = obj.initQuery;
  409. json.showRowsNum = obj.showRowsNum;
  410. json.filterType = this.scope.filterFields.type;
  411. //过滤条件
  412. if(json.filterType == 2|| json.filterType == 3){
  413. editor.save();
  414. json.filter = $('#sql').val();
  415. }else
  416. json.filter = JSON.stringify($("#ruleDiv").linkdiv("getData"));
  417. //分组数据
  418. json.supportGroup = obj.supportGroup;
  419. if(obj.supportGroup == 1){
  420. var scope = this.scope,
  421. list = scope.groupingView;
  422. var groupField = [];
  423. var groupColumnShow = [];
  424. var groupText = [];
  425. var groupOrder = [];
  426. var groupSummary=[];
  427. for(var i = 0 ; i < list.length ; i++) {
  428. groupField.push(list[i].groupField);
  429. groupColumnShow.push(list[i].groupColumnShow==1);
  430. groupSummary.push(list[i].groupSummary==1);
  431. groupText.push(list[i].groupText);
  432. groupOrder.push(list[i].groupOrder);
  433. }
  434. json.groupSetting = {
  435. groupField:groupField,
  436. groupColumnShow:groupColumnShow,
  437. groupText:groupText,
  438. groupOrder:groupOrder,
  439. groupSummary:groupSummary
  440. }
  441. json.groupSetting = JSON.stringify(json.groupSetting);
  442. }
  443. json.filterField = this.scope.dataRightsJson.showRowsNum;
  444. }
  445. },
  446. customFormSubmit : function (showResponse){
  447. var dr = this.scope.dataRightsJson;
  448. var json={
  449. id:dr.id,
  450. tableId:dr.tableId,
  451. sqlId:dr.sqlId,
  452. name:dr.name,
  453. formKey:dr.formKey,
  454. source:dr.source,
  455. defId:dr.defId,
  456. alias:dr.alias,
  457. templateAlias:dr.templateAlias,
  458. sqlAlias:dr.sqlAlias,
  459. isQuery:dr.isQuery,
  460. isFilter:dr.isFilter,
  461. needPage:dr.needPage,
  462. pageSize:dr.pageSize,
  463. displayField:this.listToString(this.scope.displayFields),
  464. conditionField:this.listToString(this.scope.conditionFields),
  465. sortField:this.listToString(this.scope.sortFields),
  466. filterField:this.listToString(this.scope.filterFields),
  467. manageField:this.listToString(this.scope.manageFields),
  468. exportField:this.listToString(this.scope.exportFileds),
  469. templateAlias:dr.templateAlias
  470. };
  471. //业务数据模板上的是否初始化模板
  472. if(dr.resetTemp){
  473. json.resetTemp=dr.resetTemp;
  474. }
  475. this.setSysQueryViewJson(json);
  476. var form = $('<form method="post" action="save.ht"></form>');
  477. var input = $("<input type='hidden' name='json'/>");
  478. var jsonStr=JSON2.stringify(json);
  479. input.val(jsonStr);
  480. form.append(input);
  481. form.ajaxForm({success:showResponse});
  482. form.submit();
  483. },
  484. listToString: function(list){
  485. for(var i = 0 ; i < list.length ; i++){
  486. if(list[i].hasOwnProperty("$$hashKey"))
  487. delete list[i].$$hashKey;
  488. }
  489. return JSON.stringify(list);
  490. },
  491. setPingyin : function(sco,from,target){
  492. var input = getValByScope("",from,sco);
  493. Share.getPingyin({
  494. input:input,
  495. postCallback:function(data){
  496. setValToScope(null,data.output,null,target,sco);
  497. }
  498. });
  499. }
  500. };
  501. return service;
  502. }])
  503. .directive('rightSelect', function($compile) {
  504. return {
  505. restrict : 'E',
  506. replace : true,
  507. scope:{
  508. list:"="
  509. },
  510. template : '<select ng-model="r" ng-change="setPermision(list)">'+
  511. '<option value="">请选择</option>'+
  512. '<option value="none">无</option>'+
  513. '<option value="everyone">所有人</option>'+
  514. '</select>',
  515. link : function(scope, elm, attrs) {
  516. scope.setPermision = function(list) {
  517. if(scope.r=="") return;
  518. for(var i = 0 ; i < list.length ; i++){
  519. if(list[i].fields&&list[i].fields.length>0){
  520. scope.setPermision(list[i].fields);
  521. }else{
  522. if(list[i].right[0].hasOwnProperty("v"))
  523. list[i].right[0] = {"v":scope.r};
  524. else
  525. list[i].right[0] = {"type":scope.r};
  526. }
  527. }
  528. }
  529. }
  530. };
  531. })
  532. .directive('toolButtons', ['dataRightsService',function(dataRightsService) {
  533. return {
  534. restrict : 'E',
  535. replace : true,
  536. scope:{type:"@",list:"=",index:"@"},
  537. template : '<div>'+
  538. '<a class="link moveup" href="javascript:;" ng-click="service.moveTr(list,index,true)"></a>'+
  539. '<a class="link movedown" href="javascript:;" ng-click="service.moveTr(list,index,false)"></a>'+
  540. '<a class="link edit" ng-if="type==3" href="javascript:;" title="编辑" ng-click="service.editFilterDialog(list,index)"></a>'+
  541. '<a class="link del" ng-if="type==4||type==3" href="javascript:;" ng-click="service.delTr(list,index)"></a>'+
  542. '</div>',
  543. link : function(scope, elm, attrs) {
  544. scope.service = dataRightsService;
  545. }
  546. };
  547. }])
  548. //显示字段,显示列字段
  549. .directive('displaySetting', function() {
  550. return {
  551. restrict : 'E',
  552. replace : true,
  553. template : '<div>'+
  554. '<table id="displayFieldTbl" class="table-grid">'+
  555. '<thead>'+
  556. '<tr>'+
  557. '<th width="5%">序号</th>'+
  558. '<th width="15%">列名</th>'+
  559. '<th width="20%">注释</th>'+
  560. '<th width="20%" ng-if="!service.noRights">'+
  561. '显示权限'+
  562. '<right-select list="displayFields"></right-select>'+
  563. '</th>'+
  564. '<th width="20%">排序</th>'+
  565. '</tr>'+
  566. '</thead>'+
  567. '<tbody>'+
  568. '<tr var="displayFieldTr" ng-repeat="f in displayFields track by $index">'+
  569. '<td var="index">{{$index}}</td>'+
  570. '<td var="name">{{f.name}}</td>'+
  571. '<td >'+
  572. '<input type="text" var="desc" ng-model="f.desc" />'+
  573. '</td>'+
  574. '<td ng-if="!service.noRights">'+
  575. '<div right="f.right[0]" choose-target></div>'+
  576. '</td>'+
  577. '<td>'+
  578. '<tool-buttons list="displayFields" index="{{$index}}" type="4"></tool-buttons>'+
  579. '</td>'+
  580. '</tr>'+
  581. '</tbody>'+
  582. '</table>'+
  583. '</div>'
  584. };
  585. })
  586. //显示字段,显示列字段 <field-setting ></field-setting> for SYS_QUERY_FIELDSETTING
  587. .directive('fieldSetting', function() {
  588. return {
  589. restrict : 'E',
  590. replace : true,
  591. template : '<div>'+
  592. '<a class="link reset" ng-click="resetDiaplayFields()">重置列表</a>'+
  593. '&nbsp;&nbsp;&nbsp;&nbsp;'+
  594. '<a class="link reset" ng-click="resetAllDiaplayFields()">重置所有列表</a>'+
  595. '<table class="table-grid">'+
  596. '<thead>'+
  597. '<tr>'+
  598. '<th width="5%">序号</th>'+
  599. '<th width="5%">顺序</th>'+
  600. '<th width="5%">列名</th>'+
  601. '<th width="5%">注释</th>'+
  602. '<th width="5%">支持排序</th>'+
  603. '<th width="5%">排序方向</th>'+
  604. '<th width="5%">默认排序</th>'+
  605. '<th width="5%">是否冻结</th>'+
  606. '<th width="5%">是否隐藏</th>'+
  607. '<th width="5%">对齐方式</th>'+
  608. '<th width="5%">统计类型</th>'+
  609. '<th width="5%">宽度(%)</th>'+
  610. '<th width="20%">统计模板'+
  611. '<div class="tipbox">'+
  612. '<a href="javascript:;" class="tipinfo"><span>这里显示分组统计使用的模版,{0}中的内容为统计结果,示例:小计:&lt;span style="color:red;">{0}&lt;/span>,如果使用需要最此字段定义分组。</span></a>'+
  613. '</div>'+
  614. '</th>'+
  615. '<th width="20%" ng-if="!service.noRights">'+
  616. '显示权限'+
  617. '<right-select list="displayFields"></right-select>'+
  618. '</th>'+
  619. /*'<th width="10%">排序</th>'+*/
  620. '</tr>'+
  621. '</thead>'+
  622. '<tbody class="fieldSetting">'+
  623. '<tr ng-repeat="f in displayFields track by $index">'+
  624. '<td >{{$index+1}}</td>'+
  625. '<td >'+
  626. '<input type="text" ng-model="f.sn" class="ht-input" style="width: 40px;"/>'+
  627. '</td>'+
  628. '<td >{{f.name}}</td>'+
  629. '<td >{{f.fieldDesc}} </td>'+
  630. '<td >'+
  631. '<input ng-model="f.sortAble" ng-if="f.isVirtual==0" type="checkbox" ng-true-value=1 ng-false-value=0 ng-checked="f.sortAble==1"/>'+
  632. '</td>'+
  633. '<td >'+
  634. '<select ng-model="f.sortSeq" ng-if="f.isVirtual==0" class="ht-input" style="width:60px;">'+
  635. '<option value="asc">asc</option>'+
  636. '<option value="desc">desc</option>'+
  637. '</select>'+
  638. '</td>'+
  639. '<td >'+
  640. '<input ng-model="f.defaultSort" ng-if="f.isVirtual==0" ng-checked="f.defaultSort==1" type="checkbox" ng-true-value=1 ng-false-value=0 ng-change="changeDefaultSort($index)"/>'+
  641. '</td>'+
  642. '<td >'+
  643. '<input ng-model="f.frozen" ng-checked="f.frozen==1" type="checkbox" ng-true-value=1 ng-false-value=0 />'+
  644. '</td>'+
  645. '<td >'+
  646. '<input ng-model="f.hidden" ng-checked="f.hidden==1" type="checkbox" ng-true-value=1 ng-false-value=0 />'+
  647. '</td>'+
  648. '<td >'+
  649. '<select ng-model="f.align" class="ht-input" style="width:60px;">'+
  650. '<option value="left">居左</option>'+
  651. '<option value="right">居右</option>'+
  652. '<option value="center">居中</option>'+
  653. '</select>'+
  654. '</td>'+
  655. '<td >'+
  656. '<select ng-model="f.summaryType" class="ht-input" style="width:60px;">'+
  657. '<option value="">请选择</option>'+
  658. '<option value="count">计数</option>'+
  659. '<option value="sum">求和</option>'+
  660. '<option value="max">最大</option>'+
  661. '<option value="min">最小</option>'+
  662. '</select>'+
  663. '</td>'+
  664. '<td >'+
  665. '<input type="text" ng-model="f.width" class="ht-input" style="width: 50px;"/>'+
  666. '</td>'+
  667. '<td >'+
  668. '<textarea rows="2" ng-model="f.summaryTemplate" style="padding: 0px 0 0 0px;resize: none" class="w100 border-none margin-none "></textarea>'+
  669. '</td>'+
  670. '<td ng-if="!service.noRights">'+
  671. '<div right="f.right[0]" choose-target></div>'+
  672. '</td>'+
  673. /*'<td>'+
  674. '<tool-buttons list="displayFields" index="{{$index}}" type="4"></tool-buttons>'+
  675. '</td>'+*/
  676. '</tr>'+
  677. '</tbody>'+
  678. '</table>'+
  679. '</div>',
  680. link:function(scope,element,attrs){
  681. scope.changeDefaultSort = function(idx){
  682. for ( var i = 0; i < scope.displayFields.length; i++) {
  683. if(i!=idx)
  684. scope.displayFields[i].defaultSort = 0;
  685. }
  686. }
  687. for(var i = 0 ;i<scope.displayFields.length ; i++){
  688. var df = scope.displayFields[i];
  689. if(scope.service.isCheckboxNull(df.sortAble))
  690. df.sortAble = 0;
  691. if(scope.service.isCheckboxNull(df.defaultSort))
  692. df.defaultSort = 0;
  693. if(!df.sortSeq)
  694. df.sortSeq = 'asc';
  695. if(!df.align)
  696. df.align = 'left';
  697. if(scope.service.isCheckboxNull(df.frozen))
  698. df.frozen = 0;
  699. if(scope.service.isCheckboxNull(df.hidden))
  700. df.hidden = 0;
  701. }
  702. scope.oldDisplayFields = $.extend(true,[],scope.displayFields);
  703. scope.resetDiaplayFields = function(){
  704. scope.displayFields = $.extend(true,[],scope.oldDisplayFields);
  705. }
  706. scope.resetAllDiaplayFields = function(){
  707. scope.displayFields = $.extend(true,[],scope.allDisplayFields);
  708. }
  709. }
  710. };
  711. })
  712. //功能按钮<manage-setting ></manage-setting>
  713. .directive('manageSetting', function() {
  714. return {
  715. restrict : 'E',
  716. replace : true,
  717. template : '<div>'+
  718. '<div class="table-top-left" ng-if="!service.noRights">'+
  719. '<div class="toolBar" style="margin:0;">'+
  720. '<div class="group">'+
  721. '<a class="link add" id="btnSearch" ng-click="service.addManage()">添加</a>'+
  722. '</div>'+
  723. '</div>'+
  724. '</div>'+
  725. '<table id="manageTbl" class="table-grid">'+
  726. '<thead>'+
  727. '<tr>'+
  728. '<th width="5%">选择</th>'+
  729. '<th width="15%">名称</th>'+
  730. '<th width="10%">类型</th>'+
  731. '<th ng-if="!service.noRights">'+
  732. '权限'+
  733. '<right-select list="manageFields"></right-select>'+
  734. '</th>'+
  735. '<th width="10%">管理</th>'+
  736. '</tr>'+
  737. '</thead>'+
  738. '<tbody>'+
  739. '<tr var="manageTr" ng-repeat="f in manageFields">'+
  740. '<td var="index">'+
  741. '<input class="pk" type="checkbox" name="select"></td>'+
  742. '<td >'+
  743. '<input type="text" ng-model="f.desc" class="ht-input"></td>'+
  744. '<td>'+
  745. '<select ng-model="f.name" ng-options="m.k as m.v for m in managerButtons" class="ht-input">'+
  746. '<option value="">请选择</option>'+
  747. '</select>'+
  748. '</td>'+
  749. '<td ng-if="!service.noRights">'+
  750. '<div right="f.right[0]" choose-target></div>'+
  751. '</td>'+
  752. '<td>'+
  753. '<tool-buttons list="manageFields" index="{{$index}}" type="4"></tool-buttons>'+
  754. '</td>'+
  755. '</tr>'+
  756. '</tbody>'+
  757. '</table>'+
  758. '</div>'
  759. };
  760. })
  761. //功能按钮<manage-setting-view ></manage-setting-view>
  762. .directive('manageSettingView', function() {
  763. return {
  764. restrict : 'E',
  765. replace : true,
  766. template : '<div>'+
  767. '<a class="link reset" id="btnSearch" ng-click="resetFields()">重置按钮</a>'+
  768. '<table id="manageTbl" class="table-grid">'+
  769. '<thead>'+
  770. '<tr>'+
  771. '<th width="15%">名称</th>'+
  772. '<th width="10%">类型</th>'+
  773. '<th width="10%">URL路径</th>'+
  774. '<th width="10%">管理</th>'+
  775. '</tr>'+
  776. '</thead>'+
  777. '<tbody>'+
  778. '<tr var="manageTr" ng-repeat="f in manageFields">'+
  779. '<td >'+
  780. '{{f.name}}'+
  781. '</td>'+
  782. '<td >'+
  783. '{{f.inRow==1?"行内":"页头"}}'+
  784. '</td>'+
  785. '<td >'+
  786. '{{f.urlPath}}'+
  787. '</td>'+
  788. '<td>'+
  789. '<tool-buttons list="manageFields" index="{{$index}}" type="4"></tool-buttons>'+
  790. '</td>'+
  791. '</tr>'+
  792. '</tbody>'+
  793. '</table>'+
  794. '</div>',
  795. link:function(scope,el,attrs){
  796. scope.oldManageFields = $.extend(true,[],scope.manageFields);
  797. scope.resetFields = function(){
  798. scope.manageFields = $.extend(true,[],scope.sqlButtons);
  799. }
  800. }
  801. };
  802. })
  803. //导出字段
  804. .directive('exportSetting', function() {
  805. return {
  806. restrict : 'E',
  807. replace : true,
  808. template : '<div>'+
  809. '<table id="exportFieldTbl" class="table-grid">'+
  810. '<thead>'+
  811. '<tr>'+
  812. '<th width="5%">序号</th>'+
  813. '<th width="15%">列名</th>'+
  814. '<th width="20%">注释</th>'+
  815. '<th width="20%" ng-if="!service.noRights">'+
  816. '导出权限'+
  817. '<right-select list="exportFileds"></right-select>'+
  818. '</th>'+
  819. '</tr>'+
  820. '</thead>'+
  821. '<tbody ng-repeat="table in exportFileds" ng-if="table.fields">'+
  822. '<tr var="exportTableTr">'+
  823. '<td var="table" colspan="6">{{table.tableDesc}}({{table.tableName}})</td>'+
  824. '</tr>'+
  825. '<tr var="exportFieldTr" ng-repeat="f in table.fields">'+
  826. '<td var="index">{{$index}}</td>'+
  827. '<td var="name">{{f.name}}</td>'+
  828. '<td>'+
  829. '<input type="text" ng-model="f.desc" ></td>'+
  830. '<td ng-if="!service.noRights">'+
  831. '<div right="f.right[0]" choose-target></div>'+
  832. '</td>'+
  833. '</tr>'+
  834. '</tbody>'+
  835. '<tr var="exportFieldTr" ng-repeat="f in exportFileds" ng-if="!f.fields">'+
  836. '<td var="index">{{$index}}</td>'+
  837. '<td var="name">{{f.name}}</td>'+
  838. '<td>'+
  839. '<input type="text" ng-model="f.desc" ></td>'+
  840. '<td ng-if="!service.noRights">'+
  841. '<div right="f.right[0]" choose-target></div>'+
  842. '</td>'+
  843. '</tr>'+
  844. '</table>'+
  845. '</div>',
  846. link:function(scope,el,attrs){
  847. console.info("scope.table.fields");
  848. }
  849. };
  850. })
  851. //查询条件字段 <condition-setting ></condition-setting>
  852. .directive('conditionSetting', function() {
  853. return {
  854. restrict : 'E',
  855. replace : true,
  856. template : '<div>'+
  857. '<div class="condition-cols">'+
  858. '<div >'+
  859. '<div class="condition-cols-div">'+
  860. '<table id="condition-columnsTbl" cellpadding="0" cellspacing="0" border="0" class="table-detail">'+
  861. '<thead>'+
  862. '<tr class="leftHeader">'+
  863. '<th>列名</th>'+
  864. '<th>注释</th>'+
  865. '<th>类型</th>'+
  866. '</tr>'+
  867. '</thead>'+
  868. '<tbody>'+
  869. '<tr ng-repeat="field in bpmFormTable.fieldList" ng-if="field.isVirtual!=1" ng-class="{odd:$index%2==0,even:$index%2!=0,\'tr-select\':field.checked}" ng-click="field.checked=!field.checked">'+
  870. '<td>{{field.fieldName||field.name}}</td>'+
  871. '<td>{{field.fieldDesc}}</td>'+
  872. '<td>{{field.fieldType||field.type||field.dataType}}</td>'+
  873. '</tr>'+
  874. '</tbody>'+
  875. '</table>'+
  876. '</div>'+
  877. '</div>'+
  878. '</div>'+
  879. '<div class="condition-conds" ng-if="type!=\'sysQueryView\'">'+
  880. '<div class="condition-conds-div condition-conds-build" id="condition-build-div">'+
  881. '<div class="condition-conds-div-left">'+
  882. '<div class="condition-conds-div-left-div" style="padding-top: 180px;">'+
  883. '<a href="javascript:;" class="button" ng-click="service.selectCondition()">'+
  884. '<span>==></span>'+
  885. '</a>'+
  886. '</div>'+
  887. '</div>'+
  888. '<div class="condition-conds-div-right">'+
  889. '<div class="condition-conds-div-right-div">'+
  890. '<table id="conditionTbl" cellpadding="0" cellspacing="0" border="0" class="table-detail">'+
  891. '<thead>'+
  892. '<tr class="leftHeader">'+
  893. '<th >列名</th>'+
  894. '<th >显示名</th>'+
  895. '<th >控件类型</th>'+
  896. '<th >条件</th>'+
  897. '<th >值来源</th>'+
  898. '<th >管理</th>'+
  899. '</tr>'+
  900. '</thead>'+
  901. '<tbody>'+
  902. '<tr ng-repeat="cd in conditionFields">'+
  903. '<td var="name">{{cd.na}}</td>'+
  904. '<td>'+
  905. '<input ng-model="cd.cm" type="text" class="ht-input w100 h100 border-none margin-none "/>'+
  906. '</td>'+
  907. '<td>'+
  908. '<select ng-model="cd.ct" style="width:70px;" class="ht-input w100 margin-none " ng-options="c.k as c.v for c in ctlOptions">'+
  909. '<option value="">请选择</option>'+
  910. '</select>'+
  911. '</td>'+
  912. '<td>'+
  913. '<select ng-model="cd.op" style="width:70px;" class="ht-input w100 margin-none " ng-options="c.k as c.v for c in getOptions(cd.ty)">'+
  914. '<option value="">请选择</option>'+
  915. '</select>'+
  916. '</td>'+
  917. '<td>'+
  918. '<select ng-model="cd.vf" style="width:70px;" class="ht-input w100 margin-none " >'+
  919. '<option value="" >请选择</option>'+
  920. '<option value="1" >表单输入</option>'+
  921. '<option value="5" >动态传入</option>'+
  922. '</select>'+
  923. '</td>'+
  924. '<td>'+
  925. '<tool-buttons list="conditionFields" index="{{$index}}" type="4"></tool-buttons>'+
  926. '</td>'+
  927. '</tr>'+
  928. '</tbody>'+
  929. '</table>'+
  930. '</div>'+
  931. '</div>'+
  932. '</div>'+
  933. '</div>'+
  934. '<div class="condition-conds" ng-if="type==\'sysQueryView\'">'+
  935. '<div class="condition-conds-div condition-conds-build" id="condition-build-div">'+
  936. '<div class="condition-conds-div-left">'+
  937. '<div class="condition-conds-div-left-div" style="padding-top: 180px;">'+
  938. '<a href="javascript:;" class="button" ng-click="service.selectCondition(type)">'+
  939. '<span>==></span>'+
  940. '</a>'+
  941. '</div>'+
  942. '</div>'+
  943. '<div class="condition-conds-div-right">'+
  944. '<div class="condition-conds-div-right-div">'+
  945. '<table id="conditionTbl" cellpadding="0" cellspacing="0" border="0" class="table-detail fieldSetting">'+
  946. '<thead>'+
  947. '<tr class="leftHeader">'+
  948. '<th width="2%">列名</th>'+
  949. '<th width="2%">数据类型</th>'+
  950. '<th width="2%">操作符</th>'+
  951. '<th width="2%">值来源</th>'+
  952. '<th width="5%">格式化</th>'+
  953. '<th width="5%">管理</th>'+
  954. '</tr>'+
  955. '</thead>'+
  956. '<tbody>'+
  957. '<tr ng-repeat="cd in conditionFields">'+
  958. '<td >{{cd.name}}</td>'+
  959. '<td >{{cd.type}}</td>'+
  960. '<td>'+
  961. '<select ng-model="cd.operate" class="ht-input w100 margin-none " style="width:70px;" ng-options="c.k as c.v for c in service.getOperateOptions(cd.type)">'+
  962. '</select>'+
  963. '</td>'+
  964. '<td>'+
  965. '<select ng-model="cd.valueFrom" class="ht-input w100 margin-none ">'+
  966. '<option value="1" >表单输入</option>'+
  967. '<option value="5" >动态传入</option>'+
  968. '</select>'+
  969. '</td>'+
  970. '<td>'+
  971. '<select ng-model="cd.format" class="ht-input w100 margin-none " ng-if="cd.type==\'date\'">'+
  972. '<option value="yyyy-MM-dd">yyyy-MM-dd</option>'+
  973. '<option value="yyyy-MM-dd HH:mm:ss">yyyy-MM-dd HH:mm:ss</option>'+
  974. '<option value="yyyy-MM-dd HH:mm:00">yyyy-MM-dd HH:mm:00</option>'+
  975. '<option value="HH:mm:ss">HH:mm:ss</option>'+
  976. '</select>'+
  977. '</td>'+
  978. '<td>'+
  979. '<tool-buttons list="conditionFields" index="{{$index}}" type="4"></tool-buttons>'+
  980. '</td>'+
  981. '</tr>'+
  982. '</tbody>'+
  983. '</table>'+
  984. '</div>'+
  985. '</div>'+
  986. '</div>'+
  987. '</div>'+
  988. '</div>',
  989. link:function(scope,el,attrs){
  990. }
  991. };
  992. })
  993. //过滤条件<filter-setting ></filter-setting>
  994. .directive('filterSetting', function() {
  995. return {
  996. restrict : 'E',
  997. replace : true,
  998. template : '<div>'+
  999. '<div class="table-top-left">'+
  1000. '<div class="toolBar" style="margin:0;">'+
  1001. '<div class="group">'+
  1002. '<a class="link add" id="btnSearch" ng-click="service.addFilter(filterUrl)">添加</a>'+
  1003. '</div>'+
  1004. '</div>'+
  1005. '</div>'+
  1006. '<table id="filterTbl" class="table-grid">'+
  1007. '<thead>'+
  1008. '<tr>'+
  1009. '<th width="5%">选择</th>'+
  1010. '<th width="10%">名称</th>'+
  1011. '<th width="10%">Key</th>'+
  1012. '<th width="10%">类型</th>'+
  1013. '<th ng-if="!service.noRights">'+
  1014. '权限'+
  1015. '<right-select list="filterFields"></right-select>'+
  1016. '</th>'+
  1017. '<th width="10%">管理</th>'+
  1018. '</tr>'+
  1019. '</thead>'+
  1020. '<tbody>'+
  1021. '<tr var="filterTr" ng-repeat="f in filterFields">'+
  1022. '<td var="index">'+
  1023. '<input class="pk" type="checkbox" name="select"></td>'+
  1024. '<td >{{f.name}}</td>'+
  1025. '<td >{{f.key}}</td>'+
  1026. '<td >{{f.type==2?"SQL":"条件脚本"}}</td>'+
  1027. '<td ng-if="!service.noRights">'+
  1028. '<div right="f.right[0]" choose-target></div>'+
  1029. '</td>'+
  1030. '<td>'+
  1031. '<tool-buttons list="filterFields" index="{{$index}}" type="3" ></tool-buttons>'+
  1032. '</td>'+
  1033. '</tr>'+
  1034. '</tbody>'+
  1035. '</table>'+
  1036. '</div>'
  1037. };
  1038. })
  1039. //排序字段
  1040. .directive('sortSetting', function() {
  1041. return {
  1042. restrict : 'E',
  1043. replace : true,
  1044. scope:true,
  1045. template : '<div>'+
  1046. '<div class="sort-cols">'+
  1047. '<div class="sort-cols-div">'+
  1048. '<table id="sort-columnsTbl" cellpadding="0" cellspacing="0" border="0" class="table-detail">'+
  1049. '<thead>'+
  1050. '<tr class="leftHeader">'+
  1051. '<th>选择</th>'+
  1052. '<th>列名</th>'+
  1053. '<th>注释</th>'+
  1054. '</tr>'+
  1055. '</thead>'+
  1056. '<tbody>'+
  1057. '<tr ng-repeat="field in bpmFormTable.tableFieldList||bpmFormTable.fieldList" ng-class="{odd:$index%2==0,even:$index%2!=0}" ng-click="field.checked=!field.checked">'+
  1058. '<td>'+
  1059. '<input class="pk" type="checkbox" ng-model="field.checked">'+
  1060. '<td>{{field.name||field.fieldName}}</td>'+
  1061. '<td>{{field.desc||field.fieldDesc}}</td>'+
  1062. '</tr>'+
  1063. '</tbody>'+
  1064. '</table>'+
  1065. '</div>'+
  1066. '</div>'+
  1067. '<div class="sort-conds">'+
  1068. '<div class="sort-conds-div sort-conds-build" id="sort-build-div">'+
  1069. '<div class="sort-conds-div-left">'+
  1070. '<div class="sort-conds-div-left-div">'+
  1071. '<a style="margin-top: 180px;" ng-click="service.selectSort(listkey,namekey,desckey)" href="javascript:;" class="button">'+
  1072. '<span>==></span>'+
  1073. '</a>'+
  1074. '</div>'+
  1075. '</div>'+
  1076. '<div class="sort-conds-div-right">'+
  1077. '<div class="sort-conds-div-right-div">'+
  1078. '<table id="sortTbl" cellpadding="0" cellspacing="0" border="0" class="table-detail">'+
  1079. '<thead>'+
  1080. '<tr class="leftHeader">'+
  1081. '<th >列名</th>'+
  1082. '<th >注释</th>'+
  1083. '<th >排序</th>'+
  1084. '<th >管理</th>'+
  1085. '</tr>'+
  1086. '</thead>'+
  1087. '<tbody>'+
  1088. '<tr var="sortTr" ng-repeat="sd in sortFields">'+
  1089. '<td >{{sd.name}}</td>'+
  1090. '<td >{{sd.desc}}</td>'+
  1091. '<td>'+
  1092. '<select ng-model="sd.sort">'+
  1093. '<option value="">请选择</option>'+
  1094. '<option value="ASC">升序</option>'+
  1095. '<option value="DESC">降序</option>'+
  1096. '</select>'+
  1097. '</td>'+
  1098. '<td>'+
  1099. '<tool-buttons list="sortFields" index="{{$index}}" type="4"></tool-buttons>'+
  1100. '</td>'+
  1101. '</tr>'+
  1102. '</tbody>'+
  1103. '</table>'+
  1104. '</div>'+
  1105. '</div>'+
  1106. '</div>'+
  1107. '</div>'+
  1108. '</div>'+
  1109. '</div>',
  1110. link:function(scope,element,attrs){
  1111. scope['listkey'] = attrs['listkey'];
  1112. scope['namekey'] = attrs['namekey'];
  1113. scope['desckey'] = attrs['desckey'];
  1114. }
  1115. };
  1116. })