check_detail.html 68 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>标注中心</title>
  6. <script src="/bower_components/jquery/dist/jquery.min.js"></script>
  7. <link href="/dist/css/normalize.min.css" rel="stylesheet">
  8. <link href="/dist/css/animate.min.css" rel="stylesheet">
  9. <link rel="stylesheet" href="/dist/css/zz.css">
  10. <link rel="stylesheet" href="/dist/css/index.css">
  11. <script src="/dist/js/vue.min.js"></script>
  12. <script src="/dist/js/index.js"></script>
  13. <style>
  14. .add-tip {
  15. width: 24px;
  16. height: 22px;
  17. line-height: 22px;
  18. text-align: center;
  19. color: #fff;
  20. margin: 0;
  21. padding: 0;
  22. border: 1px solid #ccc;
  23. background-color: #fdfdfd;
  24. }
  25. .info-box > * {
  26. cursor: pointer;
  27. }
  28. .button-group {
  29. display: flex;
  30. flex-direction: row;
  31. align-items: center;
  32. justify-content: space-between;
  33. }
  34. .button-group .info-box {
  35. margin-left: -60px;
  36. }
  37. .edit-box .edit.two .edit-title {
  38. padding-right: 4px;
  39. }
  40. .edit-box .edit .edit-input .label > span {
  41. max-width: unset;
  42. text-align: left;
  43. padding: 0 1em;
  44. }
  45. .a-button {
  46. color: #4169e3;
  47. margin: 8px 15px;
  48. padding: 4px 10px;
  49. }
  50. .button-box.delete-box {
  51. margin-right: 22px !important;
  52. margin-left: -419px !important;
  53. }
  54. .button-box.delete-box .pass {
  55. background-color: #f56c6c !important;
  56. }
  57. .pass.success {
  58. background-color: #09bb07 !important;
  59. }
  60. .pass.default {
  61. background-color: #adadad !important;
  62. }
  63. .el-table td, .el-table th {
  64. padding: 4px 0;
  65. }
  66. .top-button-group {
  67. margin-top: 20px;
  68. }
  69. .top-button-group button {
  70. margin-bottom: 12px;
  71. }
  72. .el-radio-button--mini.info .el-radio-button__inner {
  73. color: #909399 !important;
  74. background: #f4f4f5 !important;
  75. border-color: #d3d4d6 !important;
  76. }
  77. .default .el-radio-button__orig-radio + .el-radio-button__inner {
  78. color: #409eff;
  79. background: #ecf5ff;
  80. border-color: #b3d8ff;
  81. }
  82. .success .el-radio-button__orig-radio + .el-radio-button__inner {
  83. color: #67c23a;
  84. background: #f0f9eb;
  85. border-color: #c2e7b0;
  86. }
  87. .success .el-radio-button__orig-radio:checked + .el-radio-button__inner,
  88. .default .el-radio-button__orig-radio:checked + .el-radio-button__inner {
  89. color: #FFF;
  90. background-color: #409EFF;
  91. border-color: #409EFF;
  92. -webkit-box-shadow: -1px 0 0 0 #409EFF;
  93. box-shadow: -1px 0 0 0 #409EFF
  94. }
  95. </style>
  96. <script>
  97. function prettyPrint(obj) {
  98. var ENDLINE = "\n";
  99. var COMMA_ENDLINE = ",\n";
  100. var OBJ_BEGIN = "{";
  101. var OBJ_END = "}";
  102. var ARR_BEGIN = "[";
  103. var ARR_END = "]";
  104. var INDNET_SPACES = 4;
  105. return (function innerPrettyPrint(obj, spaces) {
  106. var type = typeof obj;
  107. if (type == "number" || type == "boolean") {
  108. return obj.toString();
  109. } else if (type == "string") {
  110. if (obj != "" && !isNaN(Number(obj))) {
  111. return Number(obj)
  112. }
  113. return '"' + obj + '"';
  114. } else {
  115. var entries = [];
  116. var thisIndent = ' '.repeat(spaces);
  117. var subIndent = thisIndent + ' '.repeat(INDNET_SPACES);
  118. var subSpaces = spaces + INDNET_SPACES;
  119. if (Object.prototype.toString.call(obj) == '[object Object]') {
  120. for (var k in obj) {
  121. entries.push('"' + k + '": ' + innerPrettyPrint(obj[k], subSpaces));
  122. }
  123. return OBJ_BEGIN + ENDLINE + subIndent + entries.join(COMMA_ENDLINE + subIndent) + ENDLINE + thisIndent + OBJ_END;
  124. } else if (Object.prototype.toString.call(obj) == '[object Array]') {
  125. obj.forEach(function (a) {
  126. entries.push(innerPrettyPrint(a, subSpaces));
  127. });
  128. return ARR_BEGIN + ENDLINE + subIndent + entries.join(COMMA_ENDLINE + subIndent) + ENDLINE + thisIndent + ARR_END;
  129. } else if (obj === null) {
  130. return "null";
  131. } else {
  132. return obj.toString();
  133. }
  134. }
  135. })(obj, 0);
  136. }
  137. </script>
  138. </head>
  139. <body>
  140. <main id="app">
  141. <div class="content" :class="{mm:showPop}">
  142. <!--文章区-->
  143. <div class="article">
  144. <div class="top-button-group">
  145. <el-radio-group v-model="activeLabel" size="mini">
  146. <el-radio-button class="default" label="原文"></el-radio-button>
  147. {{if .T.info.filetext}}
  148. <el-radio-button class="default" label="附件"></el-radio-button>
  149. {{end}}
  150. </el-radio-group>
  151. <el-radio-group v-model="activeLabel" v-for="(item, index) in otherInfo" size="mini">
  152. <el-radio-button class="success" :label="item.id">[[item.subtype]]</el-radio-button>
  153. <el-radio-button class="success" :label="item.id + '-附件'">附件</el-radio-button>
  154. </el-radio-group>
  155. <el-radio-group v-if="moreInfo&&moreInfo.length > 0" size="mini">
  156. <el-popover
  157. placement="right-end"
  158. trigger="hover">
  159. <el-table :data="moreInfo" max-height="300">
  160. <el-table-column width="50" property="subtype" label="类型"></el-table-column>
  161. <el-table-column width="180" property="publishtime" label="发布日期"></el-table-column>
  162. <el-table-column width="220" property="title" label="标题">
  163. <template slot-scope="scope">
  164. <a href="#" @click="openLink(scope.row.href)">[[scope.row.title]]</a>
  165. </template>
  166. </el-table-column>
  167. </el-table>
  168. <el-radio-button class="info" slot="reference" style="border-color: #d3d4d6;">更多
  169. </el-radio-button>
  170. </el-popover>
  171. </el-radio-group>
  172. </div>
  173. <hr style="border: 1px;" width="100%">
  174. <br><a v-if="getPageInfo.href.length > 0" :href="getPageInfo.href" target="_blank">查看原文</a>
  175. <!--<a href="{{.T.jyhref}}" target="_blank">剑鱼链接</a>-->
  176. <h3>[[getPageInfo.title]]</h3><br>
  177. <div v-html="pageHtml"></div>
  178. </div>
  179. <!--操作区-->
  180. <div class="operation">
  181. <!--edit-box-->
  182. <div class="edit-box">
  183. <!--edit-->
  184. <div class="edit one" v-for="(one,oindex) in editData" :key="oindex">
  185. <!--one-->
  186. <div class="edit-title" @click="one.show = !one.show">
  187. <span>[[one.title]]<span style="color: red;font-size: 14px;margin-left: 20px" v-if="one.title == '基本字段' && titleDesc">[[titleDesc]]</span></span>
  188. <div class="button-group">
  189. <div v-if="one.showCheck">
  190. <input :id="one.title" v-show="one.title == '标的信息'" @click.stop type="checkbox"
  191. v-model="one.checkAllTag">
  192. <label @click.stop v-show="one.title == '标的信息'" :for="one.title">全部标注</label>
  193. </div>
  194. <!-- &nbsp;
  195. <div v-if="one.showCheck">
  196. <input :id="one.title" @click.stop type="checkbox" v-model="one.checkType">
  197. <label @click.stop :for="one.title">是否抽取</label>
  198. </div>-->
  199. <div class="button-box">
  200. <!--v-show="one.title == '基本字段'"-->
  201. <button class="pass success" @click.stop="saveDataOne(one,'1')"
  202. style="font-size: 14px;width: auto;float:left;">通过
  203. </button>
  204. <button class="pass default" @click.stop="saveDataOne(one,'-1')"
  205. style="font-size: 14px;width: auto;float:left">取消
  206. </button>
  207. <!-- <button class="pass" @click.stop="open(one, true)" style="font-size: 14px;width: auto;float:left">保存</button>-->
  208. </div>
  209. <!--<button class="add" v-show="one.title != '基本'" @click.stop="one.content.push(getTemp(2));goMark2(500)">+</button>-->
  210. <!--<button class="add" v-show="one.title == '基本'" @click.stop="one.content[0].content.push(getTemp(3));goMark2(60)">+</button>-->
  211. <div class="info-box" @click.stop v-show="one.showCheck">
  212. <div :class="{default: one.status == '-1'}" @click="setStatus(one,'-1')"></div>
  213. <!--<div :class="{ok: one.status == '1'}" @click="one.status = '1'"></div>-->
  214. <div :class="{ok: one.status == '1'}" @click="setStatus(one,'1')"></div>
  215. <!--<div :class="{err: one.status == '0'}" @click="one.status = '0'"></div>-->
  216. <div class="add-tip" :class="{err: (one.status != '1' && one.status != '-1')}"
  217. @click="setStatus(one,'2')"></div>
  218. </div>
  219. </div>
  220. </div>
  221. <transition tag="div">
  222. <div>
  223. <div class="button-box" v-if="one.showCheck&&one.show">
  224. <button class="pass a-button" @click.stop="addChild(one, oindex)"
  225. style="font-size: 14px;width: auto;float:left;">新增[[one.title]]
  226. </button>
  227. </div>
  228. <div class="edit-content" :class="{t:one.title == '基本字段'}" v-show="one.show">
  229. <!--two-->
  230. <span v-show="one.content.length === 0">当前您还没有添加子包</span>
  231. <div class="edit two" v-for="(two,index) in one.content" :key="index">
  232. <div class="edit-title" v-if="two.title" @click="two.show = !two.show">
  233. <span>[[two.title]]</span>
  234. <div class="button-box"
  235. :style="one.title == '多包信息' ? 'margin-right: 193px' : ''">
  236. <button v-if="one.title == '多包信息'" class="pass a-button"
  237. @click.stop="addThreeChild(two,'2',one)"
  238. style="font-size: 14px;margin: 0;width: auto;float:left;">新增子包中标信息
  239. </button>
  240. <button class="pass success" @click.stop="saveDataTwo(two,'1',one)"
  241. style="font-size: 14px;width: auto;float:left;">通过
  242. </button>
  243. <button class="pass default" @click.stop="saveDataTwo(two,'-1',one)"
  244. style="font-size: 14px;width: auto;float:left">取消
  245. </button>
  246. </div>
  247. <div class="button-box delete-box">
  248. <button class="pass" @click.stop="delNewTwo(one, index, two)">删除</button>
  249. </div>
  250. </div>
  251. <transition tag="div">
  252. <div class="edit-content" v-show="two.show">
  253. <!--input-->
  254. <div class="edit-input">
  255. <div v-for="(uin, uindex) of two.uInput" class="input-box"
  256. :key="uin.title">
  257. <div class="label" v-if="uin.selectArr">
  258. <span>[[uin.title]]&nbsp;:&nbsp;</span>
  259. <select v-model="uin.select"
  260. @change="focusFn(uin, oindex,index,uindex, two, one)">
  261. <option disabled value="">请选择</option>
  262. <option v-for="o in uin.selectArr">[[o]]</option>
  263. </select>
  264. <div class="info-box">
  265. <div :class="{default: uin.status == '-1'}"
  266. @click="setStatus(uin,'-1', two, one)"></div>
  267. <div :class="{ok: uin.status == '1'}"
  268. @click="setStatus(uin,'1', two, one)"></div>
  269. <!--<div :class="{err: uin.status == '0'}" @click="uin.status = '0'"></div>-->
  270. <div class="add-tip" @click="setStatus(uin,'2', two, one)"
  271. :class="{err: (uin.status != '1' && uin.status != '-1')}"></div>
  272. </div>
  273. </div>
  274. <div class="label" v-else :title="uin.input">
  275. <span @click="goText(uin.title)">[[uin.title]]&nbsp;:&nbsp;</span>
  276. <input type="text" v-model="uin.input"
  277. @focus="goText(uin.input)" @click="goText(uin.input)"
  278. @blur="focusFn(uin, oindex, index, uindex,two,one)">
  279. <div class="info-box">
  280. <div :class="{default: uin.status == '-1'}"
  281. @click="setStatus(uin,'-1', two, one)"></div>
  282. <div :class="{ok: uin.status == '1'}"
  283. @click="setStatus(uin,'1', two, one)"></div>
  284. <!--<div :class="{err: uin.status == '0'}" @click="uin.status = '0'"></div>-->
  285. <div class="add-tip" @click="setStatus(uin,'2', two, one)"
  286. :class="{err: (uin.status != '1' && uin.status != '-1')}"></div>
  287. </div>
  288. </div>
  289. </div>
  290. </div>
  291. <!--three-->
  292. <!--<div>
  293. <div class="edit-title" v-show="one.title == '基本字段'">
  294. <span>候选人</span>
  295. <div class="info-box" >
  296. <div :class="{default: two.wstatus == '-1'}" @click="two.wstatus = '-1'"></div>
  297. <div :class="{ok: two.wstatus == '1'}" @click="two.wstatus = '1'"></div>
  298. <el-popover trigger="click" >
  299. <div style="text-align: right; margin: 0">
  300. <el-button type="success" size="mini" @click="two.wstatus = '2'">新增</el-button>
  301. <el-button type="warning" size="mini" @click="two.wstatus = '3'">修改</el-button>
  302. <el-button type="danger" size="mini" @click="two.wstatus = '4'">删除</el-button>
  303. </div>
  304. <div class="add-tip" slot="reference" :class="{err: (two.wstatus != '1' && two.wstatus != '-1')}">[[textMap[two.wstatus] || '']]</div>
  305. </el-popover>
  306. </div>
  307. </div>
  308. <div class="edit three" v-for="(three,index) in two.content" :key="index">
  309. <div class="edit-title" @click="three.show = !three.show">
  310. <span>[[three.title]]</span>
  311. </div>
  312. <div class="edit-content" v-show="three.show">
  313. <div class="edit-input">
  314. <div class="input-box" v-for="(threeUin,index) in three.uInput" :key="threeUin.title">
  315. <div class="label">
  316. <span @click="goText(threeUin.title)">[[threeUin.title]]&nbsp;:&nbsp;</span>
  317. <input type="text" v-model="threeUin.input" @focus="goText(threeUin.input)" @click="goText(threeUin.input)">
  318. <div class="info-box">
  319. <div :class="{default: threeUin.status == '-1'}" @click="threeUin.status = '-1'"></div>
  320. <div :class="{ok: threeUin.status == '1'}" @click="threeUin.status = '1'"></div>
  321. <el-popover trigger="click" >
  322. <div style="text-align: right; margin: 0">
  323. <el-button type="success" size="mini" @click="threeUin.status = '2'">新增</el-button>
  324. <el-button type="warning" size="mini" @click="threeUin.status = '3'">修改</el-button>
  325. <el-button type="danger" size="mini" @click="threeUin.status = '4'">删除</el-button>
  326. </div>
  327. <div class="add-tip" slot="reference" :class="{err: (threeUin.status != '1' && threeUin.status != '-1')}">[[textMap[threeUin.status] || '']]</div>
  328. </el-popover>
  329. </div>
  330. </div>
  331. </div>
  332. </div>
  333. </div>
  334. </div>
  335. </div>-->
  336. </div>
  337. </transition>
  338. </div>
  339. </div>
  340. </div>
  341. </transition>
  342. </div>
  343. </div>
  344. <div class="save-box">
  345. <!-- <button class="code" @click.stop="showPop = true" style="width:100px">源码</button>&nbsp;&nbsp;-->
  346. <!-- <button class="code" @click.stop="open(1)" style="width:100px">全部验证</button> -->
  347. <!-- <button class="code" @click.stop="open(2)" style="width:100px">字段验证</button>-->
  348. <button class="code" @click.stop="open(2)" style="width:100px">保存</button>&nbsp;&nbsp;
  349. <button class="code" @click.stop="openHref" style="width:100px">下一条</button>
  350. <!--<button class="code" @click.stop="window.location.href='/'" style="width:100px">下一条</button>-->
  351. </div>
  352. </div>
  353. </div>
  354. <!--弹出层-->
  355. <dialog class="dialog" v-if="showPop">
  356. <span class="close" @click="showPop = false;changeText()">x</span>
  357. <div class="pop">
  358. <div class="title">源码</div>
  359. <div class="con" ref="text" contentEditable="true">
  360. <pre v-html="addStyle(editData)"></pre>
  361. </div>
  362. <button @click="showPop = false;changeText();upChange()">保&nbsp;存</button>
  363. </div>
  364. </dialog>
  365. <dialog id="com-alert" class="dialog" style="background: rgba(124, 124, 125, 0.1);z-index:9999;display: none;">
  366. <div class="pop" style="background: rgba(124, 124, 125, 0.1);">
  367. <div id="com-alert-val" class="title" style="color:red">保存成功</div>
  368. </div>
  369. </dialog>
  370. </main>
  371. </body>
  372. <script>
  373. let did = {{ .T.did }} // 数据id
  374. let pid = {{ .T.pid }} // 项目id
  375. let tid = {{ .T.tid }}
  376. let coll = {{ .T.coll }} // 表名
  377. var moreInfo = {{ .T.moreInfo }} // 更多关联信息
  378. var otherInfo = {{ .T.otherInfo }} //公告关联信息
  379. let purchasing_status = {{ .T.ck_purchasinglist }} //标的物标记
  380. let purchasing_all_tag = {{ .T.ck_pclistag }} // 标的物是否全部标记
  381. let package_status = {{ .T.ck_package }} //包标记
  382. let winneroder_status = {{ .T.ck_winnerorder }} //中标候选人标记
  383. // 页面数据
  384. var pageDataMap = {
  385. '原文': {
  386. title: '{{.T.info.title}}',
  387. href: '{{.T.info.href}}',
  388. // html: '{{Html (Regexp (Regexp .T.info.detail "(\\n|\\\\n)\\s+" "\n") "(`|\\n|\\\\n)+" "<br/>")}}',
  389. html: '{{ .T.info.detail }}',
  390. },
  391. '附件': {
  392. title: '附件内容',
  393. href: '',
  394. // html:{{if .T.info.filetext}}{{.T.info.filetext}}.replace(/(\\n|\\\\n)\\s+/, '\n').replace(/(`|\\n|\\\\n)+/, '<br>'){{else}}``{{end}} }
  395. html: '{{ .T.info.filetext }}',
  396. },
  397. }
  398. // 是否需要显示 Group
  399. var canShowGroupsList = []
  400. var enbArr = {{ .T.enbArr }}
  401. if (enbArr) {
  402. enbArr.forEach(v => canShowGroupsList.push(v))
  403. }
  404. //获取鼠标选中的文本
  405. function getSelectedContents() {
  406. var text = "";
  407. if (window.getSelection) { //chrome,firefox,opera
  408. var range = window.getSelection().getRangeAt(0);
  409. var container = document.createElement('div');
  410. container.appendChild(range.cloneContents());
  411. text = container.innerHTML;
  412. //return container.innerHTML;
  413. //return window.getSelection(); //只复制文本
  414. } else if (document.getSelection) { //其他
  415. var range = document.getSelection().getRangeAt(0);
  416. var container = document.createElement('div');
  417. container.appendChild(range.cloneContents());
  418. text = container.innerHTML;
  419. //return container.innerHTML;
  420. //return document.getSelection(); //只复制文本
  421. } else if (document.selection) { //IE特有的
  422. text = document.selection.createRange().htmlText;
  423. //return document.selection.createRange().htmlText;
  424. //return document.selection.createRange().text; //只复制文本
  425. }
  426. text = text.replace(/(\r|\n|\s+|&nbsp;|<[^>]*>|<\/[^>]*)/g, "")
  427. return text;
  428. }
  429. //记录是否点击保存
  430. var issave = false;
  431. var nextid = {{ .T.nextid }}
  432. //基本信息
  433. var common = {{ .T.common }}
  434. var uInput = [];
  435. for (k in common) {
  436. var tmp = {}
  437. tmp.title = common[k].descript
  438. tmp.input = common[k].value
  439. tmp.key = common[k].key
  440. if (common[k].key === "subtype") {
  441. tmp.select = common[k].value
  442. tmp.selectArr = {{ .T.topsubtype }}
  443. }
  444. if (common[k].key === "attach_discern") {
  445. tmp.select = common[k].value
  446. tmp.selectArr = ['识别有效', '识别无效']
  447. }
  448. if (common[k].key === "attach_ext") {
  449. tmp.select = common[k].value
  450. tmp.selectArr = ['抽取正确', '抽取错误']
  451. }
  452. if (common[k].key === "isrepeat") {
  453. tmp.select = common[k].value
  454. tmp.selectArr = ['是', '否']
  455. }
  456. tmp.status = common[k].status
  457. if (common[k].key === "bidamounttype") {
  458. tmp.select = common[k].value ? common[k].value : '金额'
  459. tmp.selectArr = ['金额', '折扣率', '单价']
  460. tmp.status = 1
  461. }
  462. uInput[k] = tmp
  463. }
  464. //自定义字段
  465. var other = {{ .T.other }}
  466. var otherInput = [];
  467. for (k in other) {
  468. var tmp = {}
  469. tmp.title = other[k].descript
  470. tmp.input = other[k].value
  471. tmp.key = other[k].key
  472. tmp.status = other[k].status
  473. if (other[k].stype === "select") {
  474. tmp.select = other[k].value
  475. tmp.selectArr = other[k].values
  476. }
  477. otherInput[k] = tmp
  478. }
  479. //中标候选人
  480. var c_worder = {{ .T.worder }}
  481. var worder_new = {{ .T.worder_new }}
  482. var c_content = [];
  483. for (k in c_worder) {
  484. var c_uInput = [];
  485. for (i in c_worder[k]) {
  486. var tmp = {}
  487. tmp.title = c_worder[k][i].descript
  488. tmp.input = c_worder[k][i].value || ''
  489. tmp.key = c_worder[k][i].key
  490. tmp.status = c_worder[k][i].status
  491. c_uInput[i] = tmp
  492. }
  493. var content = {};
  494. content.title = "候选人"
  495. content.show = true
  496. content.status = worder_new[k]["status"]
  497. content.uInput = c_uInput
  498. content.isnew = worder_new[k]["isnew"] || false
  499. content.content = []
  500. c_content[k] = content
  501. }
  502. //标的信息
  503. var purchasinglist = {{ .T.purchasinglist }}
  504. var pcl_new = {{ .T.pcl_new }}
  505. var pcl_content = [];
  506. for (k in purchasinglist) {
  507. var c_uInput = [];
  508. for (i in purchasinglist[k]) {
  509. var tmp = {}
  510. tmp.title = purchasinglist[k][i].descript
  511. tmp.input = purchasinglist[k][i].value
  512. tmp.key = purchasinglist[k][i].key
  513. tmp.status = purchasinglist[k][i].status
  514. //if(purchasinglist[k][i].key== "pclisover"){
  515. // tmp.select = purchasinglist[k][i].value ? purchasinglist[k][i].value : '是'
  516. // //tmp.select=purchasinglist[k][i].value
  517. // tmp.selectArr=['是','否']
  518. //}
  519. c_uInput[i] = tmp
  520. }
  521. var content = {};
  522. content.title = "标的物"
  523. content.show = true
  524. content.status = pcl_new[k]["status"]
  525. content.uInput = c_uInput
  526. content.isnew = pcl_new[k]["isnew"] || false
  527. content.content = []
  528. pcl_content[k] = content
  529. }
  530. //采购意向
  531. var procurementlist = {{ .T.procurementlist }}
  532. var pcl_new_1 = {{ .T.pcl_new_1 }}
  533. var pcl_content_1 = [];
  534. for (k in procurementlist) {
  535. let c_uInput = [];
  536. for (i in procurementlist[k]) {
  537. let tmp = {}
  538. tmp.title = procurementlist[k][i].descript
  539. tmp.input = procurementlist[k][i].value
  540. tmp.key = procurementlist[k][i].key
  541. tmp.status = procurementlist[k][i].status
  542. c_uInput[i] = tmp
  543. }
  544. let content = {};
  545. content.title = "采购标的物"
  546. content.show = true
  547. content.status = pcl_new_1[k]["status"]
  548. content.uInput = c_uInput
  549. content.isnew = pcl_new_1[k]["isnew"] || false
  550. content.content = []
  551. pcl_content_1[k] = content
  552. }
  553. //var ispackage='{{.T.ispackage}}'
  554. //子包信息
  555. var packs = {{ .T.packs }}
  556. var packskey = {{ .T.packskey }}
  557. var pkg_new = {{ .T.pkg_new }}
  558. //分包抽查,若果有分包,默认ok
  559. //if(packs.length>0&&ispackage=="1"){
  560. // ck_package="1"
  561. //}
  562. var p_content = [];
  563. for (k in packs) {
  564. //子包基本信息
  565. var uInputs = [];
  566. var pack = packs[k]["pack"]
  567. for (i in pack) {
  568. var tmp = {}
  569. tmp.title = pack[i].descript
  570. tmp.input = pack[i].value
  571. tmp.key = pack[i].key
  572. tmp.status = pack[i].status
  573. if (pack[i].key === "bidamounttype") {
  574. tmp.select = pack[i].value ? pack[i].value : '金额'
  575. tmp.selectArr = ['金额', '折扣率', '单价']
  576. tmp.status = 1
  577. }
  578. uInputs[i] = tmp
  579. }
  580. //中标人信息
  581. var winnerall = packs[k]["winnerall"]
  582. for (i in winnerall) {
  583. var tmp = {}
  584. tmp.title = winnerall[i].descript
  585. tmp.input = winnerall[i].value
  586. tmp.key = winnerall[i].key
  587. tmp.status = winnerall[i].status
  588. uInputs.push(tmp)
  589. }
  590. var content = {};
  591. content.title = "子包";
  592. content.show = true;
  593. content.status = packs[k]["packstatus"];
  594. content.uInput = uInputs;
  595. content.isnew = pkg_new[k] || false
  596. content.num = packskey[k];
  597. p_content[k] = content;
  598. }
  599. var pclf = {{ .T.PurchasinglistField }}
  600. var pclfInput = []
  601. for (i in pclf) {
  602. for (key in pclf[i]) {
  603. var tempNode = {
  604. input: "",
  605. key: key,
  606. status: "2",
  607. title: pclf[i][key]
  608. }
  609. //if(key== "pclisover"){
  610. // tempNode.select= '是'
  611. // tempNode.selectArr=['是','否']
  612. //}
  613. pclfInput.push(tempNode)
  614. }
  615. }
  616. var pclf1 = {{ .T.ProcurementlistField }}
  617. const pclfInput1 = [];
  618. for (i in pclf1) {
  619. for (key in pclf1[i]) {
  620. const tempNode = {
  621. input: "",
  622. key: key,
  623. status: "2",
  624. title: pclf1[i][key]
  625. };
  626. //if(key== "pclisover"){
  627. // tempNode.select= '是'
  628. // tempNode.selectArr=['是','否']
  629. //}
  630. pclfInput1.push(tempNode)
  631. }
  632. }
  633. var wodf = {{ .T.WinnerorderField }}
  634. var wodfInput = []
  635. for (i in wodf) {
  636. for (key in wodf[i]) {
  637. wodfInput.push({
  638. input: "",
  639. key: key,
  640. status: "2",
  641. title: wodf[i][key]
  642. })
  643. }
  644. }
  645. var pf = {{ .T.PackageField }}
  646. var pfInput = []
  647. for (i in pf) {
  648. for (key in pf[i]) {
  649. var tempNode = {
  650. input: "",
  651. key: key,
  652. status: "2",
  653. title: pf[i][key]
  654. }
  655. if (key === "bidamounttype") {
  656. tempNode.select = '金额'
  657. tempNode.selectArr = ['金额', '折扣率', '单价']
  658. }
  659. pfInput.push(tempNode)
  660. }
  661. }
  662. let einfo = {{ .T.s_excp_info }}
  663. var app = new Vue({
  664. el: '#app',
  665. delimiters: ["[[", "]]"],
  666. data: {
  667. titleDesc: einfo,
  668. activeLabel: '原文',
  669. nowLabel: ['原文'],
  670. otherInfo: otherInfo,
  671. moreInfo: moreInfo,
  672. scrollCache: {
  673. value: '',
  674. index: 0
  675. },
  676. textMap: ['', '', '增', '改', '删'],
  677. // pageHtml: `{{Html (Regexp (Regexp .T.info.detail "(\\n|\\\\n)\\s+" "\n") "(`|\\n|\\\\n)+" "<br/>")}}`,
  678. pageHtml: '{{ .T.info.detail }}',
  679. showPop: false,
  680. editData:[{
  681. title: '基本字段',
  682. show: true,
  683. status: "1",
  684. key: 'common',
  685. content: [{
  686. title: '',
  687. show: true,
  688. delete: false,
  689. //wstatus:"-1",
  690. uInput: uInput
  691. //content: c_content
  692. }]
  693. }, {
  694. title: '标的信息',
  695. show: false,
  696. showCheck: true,
  697. key: 'purchasinglist',
  698. //checkType: {{.T.ck_pclisext}},
  699. checkAllTag: purchasing_all_tag,
  700. status: purchasing_status,
  701. content: pcl_content
  702. }, {
  703. title: '采购意向信息',
  704. show:false,
  705. showCheck: true,
  706. key: 'procurementlist',
  707. // checkType: {{.T.ck_pkgisext}},
  708. status: purchasing_status,
  709. content: pcl_content_1
  710. }, {
  711. title: '多包信息',
  712. show:false,
  713. showCheck: true,
  714. key: 'package',
  715. // checkType: {{.T.ck_pkgisext}},
  716. status: package_status,
  717. content: p_content
  718. }, {
  719. title: '中标候选人信息',
  720. show: false,
  721. showCheck: true,
  722. key: 'winnerorder',
  723. // checkType: {{.T.ck_wodrisext}},
  724. status: winneroder_status,
  725. content: c_content
  726. }, {
  727. title: '自定义字段',
  728. show:false,
  729. status:"1",
  730. key: 'extend',
  731. content:[{
  732. title: '',
  733. show: true,
  734. delete: false,
  735. //wstatus:"-1",
  736. uInput: otherInput
  737. }]
  738. }].filter(group => {
  739. return canShowGroupsList.includes(group.key)
  740. }),
  741. originData: []},
  742. watch: {
  743. //切换标签时更改正文内容
  744. 'activeLabel':
  745. function () {
  746. this.pageHtml = this.getPageInfo.html
  747. }},
  748. computed: {
  749. getPageInfo() {
  750. var tempData = {
  751. title: '',
  752. html: this.pageHtml,
  753. href: ''
  754. }
  755. //匹配原文或者原文附件
  756. var originData = pageDataMap[this.activeLabel]
  757. if (originData) {
  758. tempData.title = originData.title
  759. tempData.html = originData.html
  760. tempData.href = originData.href
  761. } else {//匹配原公告关联信息
  762. var tempS = this.activeLabel.split('-')
  763. var isFile = tempS.length === 2
  764. var otherData = this.otherInfo.filter(v => v.id == tempS[0])
  765. if (otherData.length > 0) {
  766. tempData.title = otherData[0].title
  767. tempData.html = otherData[0].detail
  768. tempData.href = otherData[0].href
  769. if (isFile) {
  770. tempData.title = '附件内容'
  771. tempData.html = otherData[0].filetext
  772. tempData.href = ''
  773. }
  774. }
  775. }
  776. return tempData
  777. }
  778. },
  779. mounted() {
  780. // 缓存原始数据
  781. this.originData = JSON.parse(JSON.stringify([].concat(this.editData)))
  782. },
  783. methods: {
  784. // 当前输入框数据与原始数据比较
  785. focusFn(uin, oIndex, tIndex, uIndex, two, one) {
  786. if (uin.key === "bidendtime" || uin.key === "bidopentime" || uin.key === "project_startdate" || uin.key === "project_completedate" ||
  787. uin.key === "publishtime" || uin.key === "signaturedate") {
  788. var val = uin.input
  789. if (val !== null && val !== "") {
  790. var reg = /^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])\s+(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$/;
  791. var regExp = new RegExp(reg);
  792. if (!regExp.test(val)) {
  793. this.$message({
  794. message: uin.title + ",日期格式错误!正确格式:2006-01-02 15:04:05",
  795. type: 'warning',
  796. duration: 2000,
  797. offset: 300
  798. });
  799. return
  800. }
  801. }
  802. }
  803. var newNode = this.originData[oIndex].content[tIndex]
  804. if (newNode == null) {//新增子模块处理
  805. return
  806. }
  807. var oNode = newNode.uInput[uIndex]
  808. if (oNode == null) {//新增中标人信息处理
  809. return
  810. }
  811. var changeStatus = uin.input === oNode.input//多包中新增的中标信息报错
  812. if (uin.select) {
  813. changeStatus = uin.select === oNode.select
  814. }
  815. uin.status = changeStatus ? "1" : "2"
  816. this.setStatus(uin, uin.status, two, one);
  817. },
  818. openLink(link) {
  819. window.open(link, '_blank')
  820. },
  821. // 改变基本字段属性
  822. changeBaseValue(index, input, status) {
  823. if (this.editData[0].content[0].uInput[index].input !== input) {
  824. this.editData[0].content[0].uInput[index].input = input
  825. this.editData[0].content[0].uInput[index].status = status
  826. }
  827. },
  828. selectChange(uni, status, two, one) {
  829. //状态更新
  830. if (uni.status === '-1' || uni.status === '2') {
  831. status = "2"
  832. }
  833. this.setStatus(uni, status, two, one)
  834. },
  835. openHref() {
  836. if (!issave) {
  837. alert("请先保存数据!")
  838. } else {
  839. console.log(nextid)
  840. if (nextid === "") {
  841. alert("当前已经是最后一条数据!")
  842. } else {
  843. window.location.href = "/front/user/check/detail/?pid="+pid+"&tid="+tid+"&did="+nextid
  844. }
  845. }
  846. },
  847. // 检查一级是否需要改变状态
  848. checkOneStatus: function (config) {
  849. var tempObj = {
  850. obj: config.type ? config.one : config.two
  851. }
  852. if (config.type) {
  853. tempObj.list = config.one.content
  854. } else {
  855. tempObj.list = config.two.uInput
  856. }
  857. var statusList = [0, 0, 0, 0, 0]
  858. for (var i in tempObj.list) {
  859. var tempList = tempObj.list[i]
  860. var tempIndex = Number(tempList.status)
  861. if (tempIndex === -1) {
  862. tempIndex = 0
  863. }
  864. statusList[tempIndex] = Number(statusList[tempIndex]) + 1
  865. }
  866. if (statusList[1] > 0) {
  867. tempObj.obj.status = "1"
  868. }
  869. if (statusList[4] > 0 || statusList[3] > 0 || statusList[2] > 0) {
  870. tempObj.obj.status = "2"
  871. }
  872. if (statusList[4] === tempObj.list.length) {
  873. tempObj.obj.status = "4"
  874. if (tempObj.obj.title === "标的信息" || tempObj.obj.title === "多包信息" || tempObj.obj.title === "中标候选人信息") {
  875. tempObj.obj.status = "2"
  876. }
  877. }
  878. if (statusList[3] === tempObj.list.length) {
  879. tempObj.obj.status = "2"
  880. }
  881. if (statusList[2] === tempObj.list.length) {
  882. tempObj.obj.status = "2"
  883. }
  884. if (statusList[0] === tempObj.list.length) {
  885. tempObj.obj.status = "-1"
  886. }
  887. if (!config.type) {
  888. this.checkOneStatus({
  889. one: config.one,
  890. two: config.two,
  891. type: true
  892. })
  893. }
  894. },
  895. //切换状态按钮
  896. setStatus:function (witch, s, two, one) {
  897. var key = witch.key
  898. //校验日期格式
  899. if (key === "bidendtime" || key === "bidopentime" || key === "project_startdate" || key === "project_completedate" ||
  900. key === "publishtime" || key === "signaturedate") {
  901. var val = witch.input
  902. if (val !== null && val !== "") {
  903. var reg = /^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])\s+(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$/;
  904. var regExp = new RegExp(reg);
  905. if (!regExp.test(val)) {
  906. this.$message({
  907. message: witch.title + ",日期格式错误!正确格式:2006-01-02 15:04:05",
  908. type: 'warning',
  909. duration: 2000,
  910. offset: 300
  911. });
  912. //alert(witch.title+",日期格式错误!正确格式:2006-01-02 15:04:05")
  913. return
  914. }
  915. }
  916. }
  917. if (s === '2' && !one && !two && witch.content.length === 0) {
  918. return
  919. }
  920. witch.status = s;
  921. if (two) {
  922. this.checkOneStatus({
  923. one: one,
  924. two: two,
  925. type: false
  926. })
  927. }
  928. },
  929. //二级删除
  930. delNewTwo: function (one, index, two) {
  931. //two.ck_isnew = false //目前点删除按钮页面直接不显示,但是集合索引位置不变,所以加了此代码
  932. //two.show = false
  933. // if (two.isnew) {
  934. one.content.splice(index, 1)
  935. // } else {
  936. // two.show = false
  937. // two.status = "4"
  938. // this.saveDataTwo(two, "4", one)
  939. // }
  940. this.checkOneStatus({
  941. one: one,
  942. two: two,
  943. type: true
  944. })
  945. },
  946. /*add style*/
  947. addStyle: function (data) {
  948. return prettyPrint(data).replace(/(checkAllTag|checkType|showCheck|wstatus|status|key|title|input|content|uInput|selectArr|select|show|true)/g, "<mark>$1</mark>")
  949. },
  950. /*同步修改源码*/
  951. changeText: function (boolean) {
  952. try {
  953. var tempText = JSON.parse(this.$refs.text.innerText.replace(/(\n|\s)/g, ''))
  954. if (boolean) {
  955. this.tagvalues = tempText
  956. } else {
  957. this.editData = tempText
  958. }
  959. } catch (err) {
  960. alert('源码修改失败')
  961. }
  962. },
  963. goText: function (value) {
  964. /*重置Html*/
  965. this.pageHtml = this.getPageInfo.html
  966. if (!value) {
  967. return false
  968. }
  969. var rs = new RegExp('(' + value + ')', 'gi')
  970. //选中input框值文本高亮
  971. if (rs.test(this.pageHtml)) {
  972. this.pageHtml = this.pageHtml.replace(rs, '<mark>$1</mark>')
  973. /*延迟查询dom,防止dom未插入*/
  974. var $this = this
  975. setTimeout(function () {
  976. $this.goMark(value)
  977. }, 150)
  978. } else {
  979. /*重置Html*/
  980. this.pageHtml = this.getPageInfo.html
  981. }
  982. },
  983. goMark: function (value) {
  984. var mLength = document.querySelectorAll('mark').length
  985. if (this.scrollCache.value === value) {
  986. this.scrollCache.index = (this.scrollCache.index + 1) % mLength
  987. } else {
  988. this.scrollCache.index = 0
  989. }
  990. this.scrollCache.value = value
  991. /*滚动到第一个mark*/
  992. var temp = document.querySelectorAll('mark')[this.scrollCache.index]
  993. $("mark").removeClass('focus')
  994. $(temp).addClass('focus')
  995. document.querySelector('.article').scrollTop = offset(temp).top - window.screen.height / 2
  996. },
  997. // markTag:function(n){
  998. // $.ajax({
  999. // url:"/markTag",
  1000. // method:"post",
  1001. // data: {tag:n,_id: did},
  1002. // success:function(res){
  1003. // if(res){
  1004. // document.getElementById("com-alert-val").innerHtml="标记成功";
  1005. // var label1 = document.getElementById("com-alert");
  1006. // label1.style.display="block";
  1007. // setTimeout(function(){label1.style.display="none";},1000)
  1008. // }
  1009. // }
  1010. // });
  1011. // },
  1012. addChild: function (one, oindex) {
  1013. var tempNode = {}
  1014. switch (one.title) {
  1015. case "标的信息": {
  1016. tempNode = {
  1017. //content: [],
  1018. show: true,
  1019. isnew: true,
  1020. status: "2",
  1021. title: "标的物",
  1022. uInput: JSON.parse(JSON.stringify(pclfInput))
  1023. }
  1024. break
  1025. }
  1026. case "采购意向信息": {
  1027. tempNode = {
  1028. //content: [],
  1029. show: true,
  1030. isnew: true,
  1031. status: "2",
  1032. title: "标的物",
  1033. uInput: JSON.parse(JSON.stringify(pclfInput1))
  1034. }
  1035. break
  1036. }
  1037. case "多包信息": {
  1038. tempNode = {
  1039. //content: [],
  1040. show: true,
  1041. status: "2",
  1042. isnew: true,
  1043. title: "子包",
  1044. uInput: JSON.parse(JSON.stringify(pfInput))
  1045. }
  1046. break
  1047. }
  1048. case "中标候选人信息": {
  1049. tempNode = {
  1050. //content: [],
  1051. show: true,
  1052. status: "2",
  1053. isnew: true,
  1054. title: "候选人",
  1055. uInput: JSON.parse(JSON.stringify(wodfInput))
  1056. }
  1057. break
  1058. }
  1059. }
  1060. // if (one.status >= "2") {
  1061. // one.status = '2'
  1062. // }
  1063. one.content.push(tempNode)
  1064. this.checkOneStatus({
  1065. one: one,
  1066. type: true
  1067. })
  1068. this.$nextTick(() => {
  1069. var tempN = $(".edit.one").eq(oindex).find(".edit-title")
  1070. var goTop = tempN.eq(tempN.length - 1).offset().top
  1071. setTimeout(() => {
  1072. $(".operation").scrollTop($(".operation").scrollTop() + goTop)
  1073. }, 150)
  1074. })
  1075. },
  1076. // 新增子包中标信息字段
  1077. addThreeChild:function (two, n, one) {
  1078. two.uInput.push({
  1079. input: "",
  1080. key: 'winner',
  1081. status: "2",
  1082. title: '标段(包)中标单位'
  1083. })
  1084. two.uInput.push({
  1085. input: "",
  1086. key: 'bidamount',
  1087. status: "2",
  1088. title: '标段(包)中标金额'
  1089. })
  1090. two.status = "2"
  1091. this.checkOneStatus({
  1092. one: one,
  1093. two: two,
  1094. type: false
  1095. })
  1096. },
  1097. //保存
  1098. saveDataTwo:function (two, n, one) {
  1099. two.uInput.forEach(function (v) {
  1100. var key = v.key
  1101. if (key === "bidendtime" || key === "bidopentime" || key === "project_startdate" || key === "project_completedate" ||
  1102. key === "publishtime" || key === "signaturedate") {
  1103. var val = v.input
  1104. if (val !== null && val !== "") {
  1105. var reg = /^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])\s+(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$/;
  1106. var regExp = new RegExp(reg);
  1107. if (!regExp.test(val)) {
  1108. this.$message({
  1109. message: v.title + ",日期格式错误!正确格式:2006-01-02 15:04:05",
  1110. type: 'warning',
  1111. duration: 2000,
  1112. offset: 300
  1113. });
  1114. //alert(v.title+",日期格式错误!正确格式:2006-01-02 15:04:05")
  1115. return
  1116. }
  1117. }
  1118. }
  1119. if (n === "1" && v.status === "-1") {
  1120. v.status = n
  1121. } else if (n === "-1") {
  1122. v.status = n
  1123. } else if (n === "2") {
  1124. v.status = n
  1125. } else if (n === "4") {
  1126. v.status = n
  1127. }
  1128. });
  1129. two.status = n
  1130. this.checkOneStatus({
  1131. one: one,
  1132. two: two,
  1133. type: false
  1134. })
  1135. /**
  1136. two.content.forEach(function(v) {
  1137. v.uInput.forEach(function(value) {
  1138. if (value.input && value.input != '') {
  1139. value.status = n
  1140. }
  1141. })
  1142. })
  1143. */
  1144. },
  1145. saveDataOne:function (one, n) {
  1146. //保存后的样式
  1147. var _this = this
  1148. one.content.forEach(function (v) {
  1149. v.uInput.forEach(function (value) {
  1150. var key = value.key
  1151. if (n === "1") {
  1152. if (key === "bidendtime" || key === "bidopentime" || key === "project_startdate" || key === "project_completedate" ||
  1153. key === "publishtime" || key === "signaturedate") {
  1154. var val = value.input
  1155. if (val !== null && val !== "") {
  1156. var reg = /^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])\s+(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$/;
  1157. var regExp = new RegExp(reg);
  1158. if (!regExp.test(val)) {
  1159. this.$message({
  1160. message: value.title + ",日期格式错误!正确格式:2006-01-02 15:04:05",
  1161. type: 'warning',
  1162. duration: 2000,
  1163. offset: 300
  1164. });
  1165. //alert(value.title+",日期格式错误!正确格式:2006-01-02 15:04:05")
  1166. return
  1167. }
  1168. }
  1169. }
  1170. }
  1171. // 取消全部,通过时判断状态是否处于修改新增等
  1172. if (n === "1" && value.status === "-1") {
  1173. value.status = n
  1174. } else if (n === "-1") {
  1175. value.status = n
  1176. }
  1177. })
  1178. _this.checkOneStatus({
  1179. two: v,
  1180. one: one,
  1181. type: false
  1182. })
  1183. });
  1184. },
  1185. //验证保存提示
  1186. open:function (stype) {
  1187. var noTagKey = [];
  1188. this.editData.filter(function (one) {
  1189. if (one.title === "标的信息" || one.title === "采购意向信息" || one.title === "多包信息" || one.title === "中标候选人信息") {
  1190. if (one.status === "-1") {
  1191. noTagKey.push(one.title);
  1192. }
  1193. } else {
  1194. one.content.filter(function (v) {
  1195. v.uInput.filter(function (u) {
  1196. if (u.status === "-1") {
  1197. noTagKey.push(u.title);
  1198. }
  1199. })
  1200. })
  1201. }
  1202. })
  1203. if (noTagKey.length > 0) {
  1204. var fieldText = noTagKey.join(",");
  1205. fieldText = fieldText.replace(/\([^\)]*\)/g, "");
  1206. this.$alert("未标注字段:" + fieldText);
  1207. return
  1208. }
  1209. var resultStatus = false
  1210. if (stype === 1) {//全部字段验证
  1211. var checkAllKey = this.editData.filter(function (one) {
  1212. var otherOne = one.content.filter(function (v) {
  1213. return v.uInput.filter(function (u) {
  1214. return u.status === '-1'
  1215. }).length
  1216. })
  1217. if ((one.title === "标的信息" || one.title === "采购意向信息" || one.title === "多包信息" || one.title === "中标候选人信息") && (one.status === "-1")) {
  1218. return true
  1219. } else {
  1220. return otherOne.length
  1221. }
  1222. })
  1223. resultStatus = !Boolean(checkAllKey.length)
  1224. } else {//部分字段验证
  1225. var otherTag = 0 //标注状态 0:没标 1:标注成功 2:标注失败
  1226. var baseTag = 0
  1227. this.editData.filter(function (one) {
  1228. //多包信息、中标候选人信息在为标注失败的前提下检测标注状态,一个失败不能保存
  1229. if (otherTag < 2) {
  1230. if (one.title === "标的信息" || one.title === "采购意向信息" || one.title === "多包信息" || one.title === "中标候选人信息") {
  1231. if (one.status === "-1") {//没标
  1232. if (otherTag !== 1) {//前一个标注成功不用记录后一个是否未标
  1233. otherTag = 0
  1234. }
  1235. } else {
  1236. if (one.content.length === 0) {//不含子包
  1237. if (one.status === '2') {
  1238. otherTag = 2 //失败
  1239. } else {
  1240. otherTag = 1 //成功
  1241. }
  1242. } else {//含子包
  1243. if (one.title === "标的信息") {
  1244. var otherOne = one.content.filter(function (v) {
  1245. if (v.status >= 1) {//子信息标注
  1246. var twoLength = v.uInput.filter(function (u) {
  1247. return u.status === '-1'
  1248. })
  1249. if (twoLength.length > 0) {
  1250. otherTag = 2
  1251. }
  1252. return true //返回此条信息被标注
  1253. }
  1254. })
  1255. if (otherTag !== 2) {
  1256. if (otherOne.length > 0) {//
  1257. otherTag = 1
  1258. } else {
  1259. otherTag = 2
  1260. }
  1261. }
  1262. } else {
  1263. var otherOne = one.content.filter(function (v) {
  1264. return v.uInput.filter(function (u) {
  1265. return u.status === '-1'
  1266. }).length
  1267. })
  1268. if (otherOne.length > 0) {//
  1269. otherTag = 2
  1270. } else {
  1271. otherTag = 1
  1272. }
  1273. }
  1274. }
  1275. }
  1276. } else {
  1277. var baseOne = one.content.filter(function (v) {
  1278. return v.uInput.filter(function (u) {
  1279. return u.status !== '-1'
  1280. }).length
  1281. })
  1282. if (baseOne.length > 0) {//基本字段
  1283. baseTag = 1
  1284. }
  1285. }
  1286. }
  1287. })
  1288. if (otherTag === 0 && baseTag === 1) {
  1289. resultStatus = true
  1290. } else if (otherTag === 1) {
  1291. resultStatus = true
  1292. }
  1293. }
  1294. if (!resultStatus) {
  1295. this.$alert("未标注完成");
  1296. return
  1297. }
  1298. this.$confirm('是否保存?', '提示', {
  1299. confirmButtonText: '确定',
  1300. cancelButtonText: '取消',
  1301. type: 'warning'
  1302. }).then(() => {
  1303. this.upChange(stype)
  1304. }).catch(() => {
  1305. });
  1306. },
  1307. //保存事件
  1308. upChange: function (stype) {
  1309. console.log(this.editData)
  1310. var d = JSON.stringify(this.editData);
  1311. var _this = this
  1312. $.ajax({
  1313. url: "/front/user/check/save",
  1314. type: "POST",
  1315. data: {"data": d, "s_infoid": did, "pid": pid},
  1316. success: function(res) {
  1317. console.log(res)
  1318. if (res) {
  1319. _this.$message({
  1320. message: '保存成功',
  1321. type: 'success',
  1322. duration: 1000,
  1323. offset: 300
  1324. });
  1325. issave = true//保存成功
  1326. }
  1327. },
  1328. error: function(err) {
  1329. console.log(err)
  1330. alert(err);
  1331. }
  1332. });
  1333. }
  1334. //保存提示
  1335. // open:function(one, type) {
  1336. // this.$confirm('是否保存?', '提示', {
  1337. // confirmButtonText: '确定',
  1338. // cancelButtonText: '取消',
  1339. // type: 'warning'
  1340. // }).then(() => {
  1341. // if (type) {
  1342. // this.saveOneData(one)
  1343. // } else {
  1344. // this.upChange()
  1345. // }
  1346. // }).catch(() => {
  1347. // });
  1348. // },
  1349. //一级保存
  1350. // saveOneData: function (one) {
  1351. // if (one.title==="标的信息"||one.title==="多包信息"||one.title==="中标候选人信息"){
  1352. // if(one.status === "-1"){
  1353. // this.$alert(one.title+" 未标注完成")
  1354. // return
  1355. // }else if (one.status !=="-1"){
  1356. // var isAlert = one.content.filter(function(v) {
  1357. // return v.uInput.filter(function (u) {
  1358. // return u.status === '-1'
  1359. // }).length
  1360. // })
  1361. // if (isAlert.length) {
  1362. // this.$alert(one.title+" 未标注完成")
  1363. // return
  1364. // }
  1365. // }
  1366. // }
  1367. // onetext = "["+ JSON.stringify(one) +"]";
  1368. // $.ajax({
  1369. // url:"/center/biaozhu",
  1370. // method:"post",
  1371. // data: {key:onetext,_id:did},
  1372. // success:function(res){
  1373. // if(res){
  1374. // document.getElementById("com-alert-val").innerHtml="保存成功";
  1375. // var label1 = document.getElementById("com-alert");
  1376. // label1.style.display="block";
  1377. // setTimeout(function(){
  1378. // label1.style.display="none";
  1379. // },
  1380. // 1000)
  1381. // }
  1382. // },
  1383. // error:function(err){
  1384. // alert(err);
  1385. // }
  1386. // });
  1387. // },
  1388. }
  1389. })
  1390. function offset(elem) {
  1391. if (!elem) elem = this;
  1392. var x = elem.offsetLeft;
  1393. var y = elem.offsetTop;
  1394. while (elem === elem.offsetParent) {
  1395. x += elem.offsetLeft;
  1396. y += elem.offsetTop;
  1397. }
  1398. return {left: x, top: y};
  1399. }
  1400. </script>
  1401. </html>