setTask.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649
  1. <template>
  2. <div>
  3. <el-breadcrumb separator-class="el-icon-arrow-right">
  4. <el-breadcrumb-item>首页</el-breadcrumb-item>
  5. <el-breadcrumb-item>牵头单位</el-breadcrumb-item>
  6. <el-breadcrumb-item :to="{ path: '/jc/routineMonitorqt' }">任务列表</el-breadcrumb-item>
  7. <el-breadcrumb-item>基本信息</el-breadcrumb-item>
  8. </el-breadcrumb>
  9. <el-tabs v-model="activeName" type="card" @tab-click="handleClick">
  10. <el-tab-pane label="基本信息" name="first">
  11. <el-form :model="readForm" label-position="right" label-width="auto" style="margin-left: 35%;">
  12. <el-form-item label="发布单位:" prop="releaser" class="labelItem" required>
  13. <div>{{readForm.releaser}}</div>
  14. </el-form-item>
  15. <el-form-item label="任务名称:" prop="task_name" class="labelItem" required>
  16. <div>{{readForm.task_name}}</div>
  17. </el-form-item>
  18. <el-form-item label="任务优先级:" prop="level" class="labelItem" required>
  19. <div v-if="readForm.level=='0'">一般</div>
  20. <div v-else-if="readForm.level=='1'">紧急</div>
  21. <div v-else>特急</div>
  22. </el-form-item>
  23. <el-form-item label="监测类型:" prop="task_class" width="70px" class="labelItem" required>
  24. <div>{{readForm.task_class}}</div>
  25. </el-form-item>
  26. <el-form-item label="检测模型:" prop="task_class" width="70px" class="labelItem" required>
  27. <el-select v-model="bindForm.test_model_id" size="mini">
  28. <el-option v-for="item in options" :key="item.id" :label="item.name" :value="item.id">
  29. </el-option>
  30. </el-select>
  31. </el-form-item>
  32. <el-form-item label="抽检分离:" prop="is_divide" width="70px" class="labelItem">
  33. <el-select v-model="bindForm.is_divide" size="mini">
  34. <el-option v-for="item in divideOptions" :key="item.id" :label="item.name" :value="item.id">
  35. </el-option>
  36. </el-select>
  37. </el-form-item>
  38. <el-form-item label="年度:" prop="year" class="labelItem" required>
  39. <div>{{readForm.year}}</div>
  40. </el-form-item>
  41. <!-- <el-form-item label="发布机构所属区域:" prop="year" class="labelItem" required>
  42. <div>{{readForm.year}}</div>
  43. </el-form-item> -->
  44. <el-form-item label="机构级别:" prop="groupname" class="labelItem" required>
  45. <div>{{readForm.releaserInfo.groupname}}</div>
  46. </el-form-item>
  47. <!-- <el-form-item label="批次:" prop="batch" width="200px" class="labelItem">
  48. <div>{{readForm.batch}}</div>
  49. </el-form-item> -->
  50. <el-form-item label="任务时间:" prop="starttime" width="200px" class="labelItem" required>
  51. <div>{{readForm.starttime}} 至 {{readForm.endtime}}</div>
  52. </el-form-item>
  53. <el-form-item label="抽样信息上报截止时间:" size="mini" class="labelItem" required>
  54. <el-date-picker v-model="bindForm.endtime_cydsb" type="date" value-format="yyyy-MM-dd">
  55. </el-date-picker>
  56. </el-form-item>
  57. <el-form-item label="附件:" prop="file_url" class="labelItem">
  58. <div v-if="readForm.file_url==null">无</div>
  59. <el-link v-else type="primary" :href="readForm.file_url">{{readForm.file_name}}</el-link>
  60. </el-form-item>
  61. <el-form-item label="文件号:" prop="filenum" width="200px" class="labelItem">
  62. <div v-if="readForm.filenum==null">无</div>
  63. <div v-else>{{readForm.filenum}}</div>
  64. </el-form-item>
  65. <el-form-item label="备注:" prop="log" class="labelItem">
  66. <div v-if="readForm.log==null">无</div>
  67. <div v-else>{{readForm.log}}</div>
  68. </el-form-item>
  69. </el-form>
  70. <div class="footer">
  71. <el-button type="success" size="mini" @click="bindModel">保存</el-button>
  72. <el-button type="success" size="mini" @click="next">下一步</el-button>
  73. </div>
  74. </el-tab-pane>
  75. <el-tab-pane label="机构与地域" name="second">
  76. <!-- 头部搜索栏 -->
  77. <el-row style="margin-right: 0px;">
  78. <el-form style="display: flex; flex-direction: row; margin-left: 5px;">
  79. <el-form-item label="抽样机构" class="select" size="mini">
  80. <el-input v-model="form.bear_unit" @focus="getTestListShow = true"></el-input>
  81. </el-form-item>
  82. <el-form-item label="检测机构" class="select" size="mini">
  83. <el-input v-model="form.check_unit" @focus="getTestListShow2 = true"></el-input>
  84. </el-form-item>
  85. <el-form-item label="抽样数量" class="select" size="mini">
  86. <el-input v-model="form.sample_number"></el-input>
  87. </el-form-item>
  88. <el-form-item label="报告上传单位" class="select" size="mini">
  89. <el-input v-model="form.report_unit" @focus="getTestListShow1 = true"></el-input>
  90. </el-form-item>
  91. </el-form>
  92. </el-row>
  93. <el-row style="margin-right: 0px;">
  94. <el-col :span="11">
  95. <el-form style="display: flex; flex-direction: row; margin-left: 5px; margin-top: 10px;" size="mini">
  96. <el-form-item label="抽样地区" class="select">
  97. <el-cascader :options="region" v-model="selectedOptions"
  98. @change="handleChange">
  99. </el-cascader>
  100. </el-form-item>
  101. <el-form-item label="报告上传时间:" class="select" >
  102. <el-date-picker v-model="form.uploadtime" type="date" value-format="yyyy-MM-dd">
  103. </el-date-picker>
  104. </el-form-item>
  105. </el-form>
  106. </el-col>
  107. <el-col :span="5" style="margin-top: 10px;">
  108. <el-button type="primary" size="mini" plain @click="save()">保存
  109. </el-button>
  110. <!-- <el-button type="primary" size="small" plain icon="el-icon-edit-outline" @click="appear">
  111. 重置
  112. </el-button> -->
  113. <el-button type="primary" size="mini" plain @click="back()">上一步</el-button>
  114. <el-button type="primary" size="mini" plain @click="nexto()">下一步</el-button>
  115. </el-col>
  116. </el-row>
  117. <!-- 表格数据区域-->
  118. <el-table ref="multipleTable" :data="underTask" border stripe highlight-current-row
  119. @selection-change="handleSelectionChange" style="width: 100%" :row-style="rowStyle"
  120. :cell-style="cellStyle">
  121. <el-table-column type="selection" width="50" align="center"></el-table-column>
  122. <el-table-column label="序号" width="50px" align="center">
  123. <template slot-scope="scope">
  124. {{ scope.$index+1 }}
  125. </template>
  126. </el-table-column>
  127. <el-table-column :key="table.label" v-for="table in tableHeader" :label="table.label"
  128. :prop="table.prop" align="center" :width="table.width" :fixed="table.fixed" />
  129. <el-table-column label="操作" align="center" fixed="right">
  130. <template slot-scope="scope">
  131. <el-button type="success" size="small" plain @click="sampleDetail(scope.row.sample_id)">删除
  132. </el-button>
  133. </template>
  134. </el-table-column>
  135. </el-table>
  136. <!-- 分页器区域-->
  137. <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
  138. :current-page="queryInfo.pageNum" :page-sizes="[1,10, 15, 20]" :page-size="queryInfo.pageSize"
  139. layout="total, sizes, prev, pager, next, jumper" :total="underTasktotal" background />
  140. </el-tab-pane>
  141. <el-tab-pane label="总览" name="third">
  142. <taskdetail :task_id="task_id"></taskdetail>
  143. <div class="footer">
  144. <el-button type="success" size="mini" @click="release()">发布</el-button>
  145. <el-button type="success" size="mini" @click="next">导出总览</el-button>
  146. <el-button type="success" size="mini" @click="next">返回</el-button>
  147. </div>
  148. </el-tab-pane>
  149. </el-tabs>
  150. <!-- 选择抽样机构对话框 -->
  151. <el-dialog title="机构选择" :visible.sync="getTestListShow" width="50%" :close-on-click-modal="false"
  152. @open="getTestList()" class="dialogItem">
  153. <el-form v-if="getTestListShow">
  154. <!-- 表格数据区域-->
  155. <el-table ref="singleTable" :data="testList" row-key="id" @current-change="choseChange" border stripe
  156. highlight-current-row style="width: 100%">
  157. <el-table-column label="序号" width="50px" align="center">
  158. <template slot-scope="scope">
  159. {{ scope.$index+1 }}
  160. </template>
  161. </el-table-column>
  162. <el-table-column :key="table.prop" v-for="table in tableHeaders" :label="table.label"
  163. :prop="table.prop" align="center" :width="table.width" :fixed="table.fixed" />
  164. </el-table>
  165. <div>
  166. <!-- 分页器区域-->
  167. <el-pagination @size-change="handleSizeChanges" @current-change="handleCurrentChanges"
  168. :current-page="queryInfos.pageNum" :page-sizes="[1,10, 15, 20]" :page-size="queryInfos.pageSize"
  169. layout="total, sizes, prev, pager, next, jumper" :total="totals" background />
  170. <el-button style="" type="success" size="mini" @click="choseTest()">提交</el-button>
  171. </div>
  172. </el-form>
  173. </el-dialog>
  174. <!-- 选择报告上传单位对话框 -->
  175. <el-dialog title="机构选择" :visible.sync="getTestListShow1" width="50%" :close-on-click-modal="false"
  176. @open="getTestList()" class="dialogItem">
  177. <el-form v-if="getTestListShow1">
  178. <!-- 表格数据区域-->
  179. <el-table ref="singleTable" :data="testList" row-key="id" @current-change="choseChange1" border stripe
  180. highlight-current-row style="width: 100%">
  181. <el-table-column label="序号" width="50px" align="center">
  182. <template slot-scope="scope">
  183. {{ scope.$index+1 }}
  184. </template>
  185. </el-table-column>
  186. <el-table-column :key="table.prop" v-for="table in tableHeaders" :label="table.label"
  187. :prop="table.prop" align="center" :width="table.width" :fixed="table.fixed" />
  188. </el-table>
  189. <div>
  190. <!-- 分页器区域-->
  191. <el-pagination @size-change="handleSizeChanges" @current-change="handleCurrentChanges"
  192. :current-page="queryInfos.pageNum" :page-sizes="[1,10, 15, 20]" :page-size="queryInfos.pageSize"
  193. layout="total, sizes, prev, pager, next, jumper" :total="totals" background />
  194. <el-button style="" type="success" size="mini" @click="choseReportUnit()">提交</el-button>
  195. </div>
  196. </el-form>
  197. </el-dialog>
  198. <!-- 选择检测单位对话框 -->
  199. <el-dialog title="机构选择" :visible.sync="getTestListShow2" width="50%" :close-on-click-modal="false"
  200. @open="getTestList()" class="dialogItem">
  201. <el-form v-if="getTestListShow2">
  202. <!-- 表格数据区域-->
  203. <el-table ref="singleTable" :data="testList" row-key="id" @current-change="choseChange2" border stripe
  204. highlight-current-row style="width: 100%">
  205. <el-table-column label="序号" width="50px" align="center">
  206. <template slot-scope="scope">
  207. {{ scope.$index+1 }}
  208. </template>
  209. </el-table-column>
  210. <el-table-column :key="table.prop" v-for="table in tableHeaders" :label="table.label"
  211. :prop="table.prop" align="center" :width="table.width" :fixed="table.fixed" />
  212. </el-table>
  213. <div>
  214. <!-- 分页器区域-->
  215. <el-pagination @size-change="handleSizeChanges" @current-change="handleCurrentChanges"
  216. :current-page="queryInfos.pageNum" :page-sizes="[1,10, 15, 20]" :page-size="queryInfos.pageSize"
  217. layout="total, sizes, prev, pager, next, jumper" :total="totals" background />
  218. <el-button style="" type="success" size="mini" @click="choseCheckUnit()">提交</el-button>
  219. </div>
  220. </el-form>
  221. </el-dialog>
  222. </div>
  223. </template>
  224. <script>
  225. import {
  226. provinceAndCityData,
  227. regionData,
  228. provinceAndCityDataPlus,
  229. regionDataPlus,
  230. CodeToText,
  231. TextToCode
  232. } from 'element-china-area-data'
  233. import taskdetail from './taskdetail'
  234. export default {
  235. name: 'setTask',
  236. data() {
  237. return {
  238. size: 'medium',
  239. dialogVisible2: false,
  240. activeName: 'first',
  241. id: 0,
  242. readForm: {},
  243. queryInfo: {
  244. pageNum: 1,
  245. pageSize: 10
  246. },
  247. queryInfos: {
  248. pageNum: 1,
  249. pageSize: 10
  250. },
  251. cellStyle: {
  252. padding: 2 + 'px'
  253. },
  254. rowStyle: {
  255. height: 35 + 'px'
  256. },
  257. tableHeader: [{
  258. label: '抽样机构',
  259. prop: 'bear_name',
  260. width: 180,
  261. }, {
  262. label: '检测机构',
  263. prop: 'check_name'
  264. },
  265. {
  266. label: '抽样地区',
  267. prop: 'address'
  268. }, {
  269. label: '抽样数量',
  270. prop: 'sample_number'
  271. },
  272. {
  273. label: '报告上传单位',
  274. prop: 'report_name'
  275. }, {
  276. label: '报告上传截止时间',
  277. prop: 'uploadtime'
  278. }
  279. ],
  280. checkHeader2: [{
  281. label: '检测项目',
  282. prop: 'test_name',
  283. // fixed: 'left'
  284. }],
  285. // 数据表格数据
  286. tableData: [],
  287. total: 0,
  288. task_id: '',
  289. multipleSelection: null,
  290. // 模型列表
  291. options: [],
  292. bindForm: {
  293. test_model_id: '',
  294. endtime_cydsb: ''
  295. },
  296. // 弹出检测机构弹窗
  297. getTestListShow: false,
  298. getTestListShow1: false,
  299. getTestListShow2: false,
  300. tableHeaders: [{
  301. label: '单位名称',
  302. prop: 'name',
  303. width: 300
  304. // fixed: 'left'
  305. },
  306. {
  307. label: '机构类型',
  308. prop: 'groupname',
  309. // width: 40
  310. // fixed: 'left'
  311. }, {
  312. label: '所属区域',
  313. prop: 'dtRelyOnUnit',
  314. width: 300
  315. // fixed: 'left'
  316. }
  317. ],
  318. testList: [],
  319. totals: 0,
  320. form: {
  321. bear_unit_name: '',
  322. report_unit_name: '',
  323. check_unit_name: ''
  324. },
  325. currentRow: null,
  326. currentRow1: null,
  327. currentRow2: null,
  328. // 抽样地区
  329. region: regionData,
  330. selectedOptions: [],
  331. // 机构地域表格数据
  332. underTask: [],
  333. underTasktotal: 0,
  334. // 抽检分离选项
  335. divideOptions: [{
  336. id: '0',
  337. name: '否'
  338. },
  339. {
  340. id: '1',
  341. name: '是'
  342. }
  343. ]
  344. };
  345. },
  346. components: {
  347. taskdetail
  348. },
  349. mounted() {},
  350. created() {
  351. this.task_id = this.$route.params.id
  352. console.log(this.$route.params.id)
  353. this.getTaskDetail()
  354. this.getmodelList()
  355. this.getUnderTask()
  356. },
  357. methods: {
  358. // 跳转到检测
  359. nexto() {
  360. this.activeName = 'third'
  361. },
  362. // 跳转到基本信息
  363. back() {
  364. this.activeName = 'first'
  365. },
  366. // 机构与地域---保存
  367. async save() {
  368. this.form['task_id'] = this.task_id
  369. const {
  370. data: res
  371. } = await this.$http.post("AddUnderTask", this.form);
  372. if (res.code == 0) {
  373. this.$message({
  374. type: 'success',
  375. message: '保存成功!'
  376. });
  377. this.getUnderTask()
  378. }
  379. },
  380. // 机构与地域---删除
  381. async sampleDetail() {
  382. },
  383. // 获取机构地域表格
  384. async getUnderTask() {
  385. this.queryInfo['task_id'] = this.task_id
  386. const result = await this.$http.post('getUnderTask', this.queryInfo)
  387. // 判断业务逻辑
  388. if (result.data.code == 0) {
  389. this.underTask = result.data.data.rows
  390. this.underTasktotal = result.data.data.total
  391. }
  392. },
  393. // 提交选中报告上传单位
  394. choseReportUnit() {
  395. let that = this
  396. that.form.report_unit = that.currentRow1.name
  397. that.form.report_id = that.currentRow1.id
  398. that.getTestListShow1 = false
  399. },
  400. // 提交选中检测单位
  401. choseCheckUnit() {
  402. let that = this
  403. that.form.check_unit = that.currentRow2.name
  404. that.form.check_id = that.currentRow2.id
  405. that.getTestListShow2 = false
  406. },
  407. // 提交选中抽样机构
  408. choseTest() {
  409. let that = this
  410. that.form.bear_unit = that.currentRow.name
  411. that.form.bear_id = that.currentRow.id
  412. that.getTestListShow = false
  413. },
  414. // 获取选择抽样地区
  415. handleChange() {
  416. var that = this
  417. var loc = "";
  418. // console.log(this.form.place)
  419. for (let i = 0; i < this.selectedOptions.length; i++) {
  420. loc += CodeToText[this.selectedOptions[i]];
  421. }
  422. // console.log(loc)
  423. that.form.address = loc
  424. },
  425. /** 监听每页显示多少数据的改变 */
  426. handleSizeChanges(newSize) {
  427. this.queryInfos.pageSize = newSize
  428. this.getTestList()
  429. },
  430. /** 监听页码的改变 */
  431. handleCurrentChanges(newPage) {
  432. this.queryInfos.pageNum = newPage
  433. this.getTestList()
  434. },
  435. // 获取检测机构列表
  436. async getTestList() {
  437. const result = await this.$http.post('getTestList', this.queryInfos)
  438. // 判断业务逻辑
  439. if (result.data.code == 0) {
  440. this.testList = result.data.data.rows
  441. this.totals = result.data.data.total
  442. }
  443. },
  444. choseChange(val) {
  445. this.currentRow = val;
  446. },
  447. choseChange1(val) {
  448. this.currentRow1 = val;
  449. },
  450. choseChange2(val) {
  451. this.currentRow2 = val;
  452. },
  453. // 跳转到机构与地域
  454. next() {
  455. this.activeName = 'second'
  456. },
  457. // 获取模型列表
  458. async getmodelList() {
  459. const {
  460. data: res
  461. } = await this.$http.post(
  462. "getModelList", {
  463. 'pageNum': 1,
  464. 'pageSize': 100,
  465. type_id: ""
  466. }
  467. );
  468. this.options = res.data.rows
  469. },
  470. // 绑定模型
  471. async bindModel() {
  472. var that = this
  473. that.bindForm['id'] = that.task_id
  474. const {
  475. data: res
  476. } = await this.$http.post(
  477. "bindModel", this.bindForm
  478. );
  479. if (res.code == 0) {
  480. this.$message({
  481. type: 'success',
  482. message: '绑定模型成功!'
  483. });
  484. console.log(this.res)
  485. that.getTaskDetail()
  486. }
  487. },
  488. //发布
  489. async release() {
  490. var that = this
  491. const {
  492. data: res
  493. } = await this.$http.post("qtRelease", {
  494. task_id: that.task_id
  495. });
  496. this.$router.push({
  497. path: '/jc/routineMonitorqt',
  498. })
  499. },
  500. handleClick(tab, event) {
  501. console.log(tab, event);
  502. },
  503. // 获取任务详情
  504. async getTaskDetail() {
  505. var that = this
  506. const {
  507. data: res
  508. } = await this.$http.post("getTaskDetail", {
  509. task_id: that.task_id
  510. });
  511. console.log(res.data.product)
  512. if (res.data.product.length > 0) {
  513. if (res.data.product[0].type_id == '1') {
  514. res.data.model_type = '种植业'
  515. } else if (res.data.product[0].type_id == '2') {
  516. res.data.model_type = '畜牧业'
  517. } else if (res.data.product[0].type_id == '3') {
  518. res.data.model_type = '渔业'
  519. } else {
  520. res.data.model_type = '其他'
  521. }
  522. }
  523. this.readForm = res.data
  524. this.bindForm.endtime_cydsb = res.data.endtime_cydsb
  525. },
  526. /** 修复当用户在大于1的分页进行数据搜索没有返回值的问题 */
  527. setPageNum() {
  528. this.queryInfo.pageNum = 1
  529. this.getSampleList()()
  530. },
  531. setSelectedRow() {
  532. // 设置当前页已选项
  533. this.hander = true
  534. this.tableData.forEach(item => {
  535. if (this.list.includes(item[this.uniqueKey])) {
  536. this.$refs.multipleTable.toggleRowSelection(item, true)
  537. }
  538. })
  539. this.hander = false
  540. },
  541. /** 监听每页显示多少数据的改变 */
  542. handleSizeChange(newSize) {
  543. this.queryInfo.pageSize = newSize
  544. this.getSampleList()()
  545. },
  546. /** 监听页码的改变 */
  547. handleCurrentChange(newPage) {
  548. this.queryInfo.pageNum = newPage
  549. this.getSampleList()()
  550. },
  551. // 批量勾选
  552. handleSelectionChange(val) {
  553. this.multipleSelection = val
  554. console.log(this.multipleSelection)
  555. if (this.hander) return false
  556. // this.setSelectRows() // 处理选中的方法
  557. },
  558. }
  559. }
  560. </script>
  561. <style lang="less" scoped>
  562. .el-breadcrumb {
  563. margin-bottom: 20px;
  564. }
  565. // .el-form-item {
  566. // margin-bottom: 0px;
  567. // }
  568. .el-select {
  569. width: 210px;
  570. height: 100%;
  571. }
  572. .select {
  573. display: flex;
  574. flex-direction: row;
  575. margin-left: 10px;
  576. }
  577. .el-form-item {
  578. margin-left: 8px;
  579. margin-bottom: 5px;
  580. }
  581. .labelItem /deep/ .el-form-item__label {
  582. // width: 80px;
  583. text-align: center;
  584. vertical-align: middle;
  585. float: left;
  586. font-size: 14px;
  587. color: #606266;
  588. font-weight: bold;
  589. // line-height: 40px;
  590. padding: 0 20px 0 0;
  591. -webkit-box-sizing: border-box;
  592. box-sizing: border-box;
  593. }
  594. .demonstration {
  595. margin: 20px;
  596. }
  597. // .el-form-item__content {
  598. // width: 200px;
  599. // }
  600. .my-label {
  601. width: 100px;
  602. }
  603. .el-pagination {
  604. margin-top: 25px;
  605. }
  606. .footer {
  607. margin-left: 45%;
  608. margin-top: 20px;
  609. }
  610. .el-table{
  611. margin-top: 20px;
  612. }
  613. </style>