华西海圻ELN前端工程
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

455 lines
18 KiB

  1. <template>
  2. <div class="app-container template-page">
  3. <el-form :model="searchForm" ref="searchForm" :inline="true">
  4. <el-form-item :label="$t('page.system.template.sn') + ':'" prop="sn">
  5. <el-input v-model="searchForm.sn" :placeholder="$t('form.placeholderInput')" clearable style="width: 150px"
  6. @keyup.enter.native="search" />
  7. </el-form-item>
  8. <el-form-item :label="$t('page.system.template.name') + ':'" prop="name">
  9. <el-input v-model="searchForm.name" :placeholder="$t('form.placeholderInput')" clearable style="width: 150px"
  10. @keyup.enter.native="search" />
  11. </el-form-item>
  12. <el-form-item :label="$t('page.system.template.department') + ':'" prop="deptId">
  13. <select-dept style="width:200px" v-model="searchForm.deptId" @change="search" />
  14. </el-form-item>
  15. <el-form-item :label="$t('page.system.template.status') + ':'" prop="status">
  16. <el-select v-model="searchForm.status" :placeholder="$t('form.placeholderSelect')" clearable
  17. style="width: 100px" @change="search">
  18. <el-option key="0" :label="$t('page.system.template.statusEnable')" :value="10" />
  19. <el-option key="1" :label="$t('page.system.template.statusDisable')" :value="1" />
  20. </el-select>
  21. </el-form-item>
  22. <el-form-item>
  23. <el-button type="primary" icon="el-icon-search" @click="search">{{ $t('form.search') }}</el-button>
  24. <el-button icon="el-icon-refresh" @click="reset">{{ $t('form.reset') }}</el-button>
  25. <el-button type="primary" plain icon="el-icon-plus" @click="edit(null)">新增-后期不需要</el-button>
  26. </el-form-item>
  27. </el-form>
  28. <el-table v-loading="loading" :data="list">
  29. <el-table-column :label="$t('page.system.template.sn')" align="center" prop="sn" />
  30. <el-table-column :label="$t('page.system.template.sn')" align="center" prop="showSn" />
  31. <el-table-column :label="$t('page.system.template.name')" align="center">
  32. <template slot-scope="scope">
  33. <span v-if="$i18n.locale === 'zh_CN'">{{ scope.row.name }}</span>
  34. <span v-else>{{ scope.row.nameEn }}</span>
  35. </template>
  36. </el-table-column>
  37. <el-table-column :label="$t('page.system.template.department')" align="center" prop="deptName" />
  38. <el-table-column :label="$t('page.system.template.status')" prop="status" align="center" width="100">
  39. <template slot-scope="scope">
  40. <span v-if="scope.row.status === 10">{{ $t('page.system.template.statusEnable') }}</span>
  41. <span v-if="scope.row.status === 1">{{ $t('page.system.template.statusDisable') }}</span>
  42. </template>
  43. </el-table-column>
  44. <el-table-column label="产物" prop="product" align="center" width="100">
  45. <template slot-scope="scope">
  46. <span v-if="scope.row.product == 1">试剂</span>
  47. <span v-if="scope.row.product == 3">给药制剂</span>
  48. <span v-if="scope.row.product == 5">麻精药</span>
  49. <span v-if="scope.row.product == 7">供试品</span>
  50. <span v-if="scope.row.product == 9">细胞</span>
  51. <span v-if="scope.row.product == 11">细菌</span>
  52. <span v-if="scope.row.product == 20"></span>
  53. </template>
  54. </el-table-column>
  55. <!-- <el-table-column label="模板类型" prop="type" align="center" width="100">
  56. <template slot-scope="scope">
  57. <span v-if="scope.row.type === 10">高风险表单</span>
  58. <span v-if="scope.row.type === 1">普通表单</span>
  59. </template>
  60. </el-table-column> -->
  61. <el-table-column :label="$t('form.operate')" fixed="right" align="center" width="100">
  62. <template slot-scope="scope">
  63. <el-button type="text" @click="edit(scope.row)">{{ $t('page.system.template.bj') }}</el-button>
  64. <el-button type="text" @click="bdpz(scope.row)" v-hasPermi="['business:template:detail']">{{
  65. $t('page.system.template.detail') }}</el-button>
  66. </template>
  67. </el-table-column>
  68. </el-table>
  69. <pagination v-show="total > 0" :total="total" :page.sync="searchForm.pageNum" :limit.sync="searchForm.pageSize"
  70. @pagination="getList" />
  71. <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :title="infoDialog.title"
  72. :visible.sync="infoDialog.visible" width="800px" append-to-body>
  73. <el-form ref="infoDialogForm" :model="infoDialog.formData" :rules="infoDialog.rules" label-width="180px">
  74. <el-row>
  75. <el-col :span="24">
  76. <el-form-item label="编号:" prop="sn">
  77. <el-input v-model="infoDialog.formData.sn" />
  78. </el-form-item>
  79. </el-col>
  80. <el-col :span="24">
  81. <el-form-item label="名称:" prop="name">
  82. <el-input v-model="infoDialog.formData.name" />
  83. </el-form-item>
  84. </el-col>
  85. <el-col :span="24">
  86. <el-form-item label="英文名称:" prop="nameEn">
  87. <el-input v-model="infoDialog.formData.nameEn" />
  88. </el-form-item>
  89. </el-col>
  90. <el-col :span="24">
  91. <el-form-item label="部门/学科:" prop="deptId">
  92. <select-dept v-model="infoDialog.formData.deptId" :multiple="true" />
  93. </el-form-item>
  94. </el-col>
  95. <el-col :span="24">
  96. <el-form-item label="状态:" prop="status">
  97. <el-select v-model="infoDialog.formData.status" :placeholder="$t('form.placeholderSelect')"
  98. style="width:100%">
  99. <el-option label="启用" :value="10" />
  100. <el-option label="禁用" :value="1" />
  101. </el-select>
  102. </el-form-item>
  103. </el-col>
  104. <el-col :span="24">
  105. <el-form-item label="产物:" prop="product">
  106. <el-select v-model="infoDialog.formData.product" :placeholder="$t('form.placeholderSelect')"
  107. style="width:100%">
  108. <el-option label="试剂" :value="1" />
  109. <el-option label="给药制剂" :value="3" />
  110. <el-option label="麻精药" :value="5" />
  111. <!-- <el-option label="供试品" :value="7" /> -->
  112. <el-option label="细胞" :value="9" />
  113. <el-option label="细菌" :value="11" />
  114. <el-option label="无" :value="20" />
  115. </el-select>
  116. </el-form-item>
  117. </el-col>
  118. <el-col :span="24">
  119. <el-form-item label="填报是否显示观察按钮:" prop="showGc">
  120. <el-select v-model="infoDialog.formData.showGc" :placeholder="$t('form.placeholderSelect')"
  121. style="width:100%">
  122. <el-option label="否" :value="1" />
  123. <el-option label="是" :value="10" />
  124. </el-select>
  125. </el-form-item>
  126. </el-col>
  127. <el-col :span="24">
  128. <el-form-item label="填报显示药剂存储按钮:" prop="showYjcc">
  129. <el-select v-model="infoDialog.formData.showYjcc" :placeholder="$t('form.placeholderSelect')"
  130. style="width:100%">
  131. <el-option label="否" :value="1" />
  132. <el-option label="是" :value="10" />
  133. </el-select>
  134. </el-form-item>
  135. </el-col>
  136. <el-col :span="24">
  137. <el-form-item label="仅提交:" prop="onlySubmit">
  138. <el-select v-model="infoDialog.formData.onlySubmit" :placeholder="$t('form.placeholderSelect')"
  139. style="width:100%">
  140. <el-option label="否" :value="1" />
  141. <el-option label="是" :value="10" />
  142. </el-select>
  143. </el-form-item>
  144. </el-col>
  145. <el-col :span="24">
  146. <el-form-item label="是否需要病理学家审核:" prop="showBlxjsh">
  147. <el-select v-model="infoDialog.formData.showBlxjsh" :placeholder="$t('form.placeholderSelect')"
  148. style="width:100%">
  149. <el-option label="否" :value="1" />
  150. <el-option label="是" :value="10" />
  151. </el-select>
  152. </el-form-item>
  153. </el-col>
  154. <el-col :span="24">
  155. <el-form-item label="所属试验类型:" prop="studyType">
  156. <el-select v-model="studyTypeArr" multiple @change="studyTypeChange"
  157. :placeholder="$t('form.placeholderSelect')" style="width:100%">
  158. <el-option label="试验" value="1" />
  159. <el-option label="非试验" value="5" />
  160. <el-option label="麻精药表单" value="10" />
  161. </el-select>
  162. </el-form-item>
  163. </el-col>
  164. <el-col :span="24">
  165. <el-form-item label="所属表单类型:" prop="studyFormType">
  166. <el-select v-model="studyFormTypeArr" multiple @change="studyFormTypeChange"
  167. :placeholder="$t('form.placeholderSelect')" style="width:100%">
  168. <el-option label="预填表单" value="1" />
  169. <el-option label="填报表单" value="5" />
  170. <el-option label="配制计划表" value="10" />
  171. <el-option label="领取申请单" value="15" />
  172. </el-select>
  173. </el-form-item>
  174. </el-col>
  175. <el-col :span="24">
  176. <el-form-item label="pdf导出大小:" prop="pdfSize">
  177. <el-select v-model="infoDialog.formData.pdfSize" :placeholder="$t('form.placeholderSelect')"
  178. style="width:100%">
  179. <el-option label="a1" value="a1" />
  180. <el-option label="a2" value="a2" />
  181. <el-option label="a3" value="a3" />
  182. <el-option label="a4" value="a4" />
  183. </el-select>
  184. </el-form-item>
  185. </el-col>
  186. <!-- <el-col :span="24">
  187. <el-form-item label="类型:" prop="type">
  188. <el-select v-model="infoDialog.formData.type" :placeholder="$t('form.placeholderSelect')" style="width:100%">
  189. <el-option label="普通表单" :value="1" />
  190. <el-option label="高风险表单" :value="10" />
  191. </el-select>
  192. </el-form-item>
  193. </el-col> -->
  194. <el-col :span="24">
  195. <el-form-item label="步骤库:" prop="stepGroupIds">
  196. <el-select multiple v-model="stepGroupIdArr" :placeholder="$t('form.placeholderSelect')"
  197. style="width:100%" @change="changeStepGroup" filterable>
  198. <el-option v-for="item in stepGroupList" :key="item.id" :label="item.name" :value="item.id" />
  199. </el-select>
  200. </el-form-item>
  201. </el-col>
  202. </el-row>
  203. </el-form>
  204. <div slot="footer" class="dialog-footer">
  205. <el-button type="primary" @click="save"> </el-button>
  206. <el-button @click="infoDialog.visible = false"> </el-button>
  207. </div>
  208. </el-dialog>
  209. <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :title="$t('page.system.template.bdpz')"
  210. :visible.sync="tableDialog.visible" width="90%" append-to-body>
  211. <TemplateTable ref="templateTable" :sn="tableDialog.sn" :templateData="tableDialog.templateData"
  212. v-if="tableDialog.visible" fillType="preFill" />
  213. </el-dialog>
  214. </div>
  215. </template>
  216. <script>
  217. import { template_list, template_info, template_save, template_delete } from "@/api/business/template/template";
  218. import { stepGroup_list } from "@/api/business/step/step";
  219. import SelectDept from '@/views/business/comps/select/SelectDept.vue';
  220. import TemplateTable from '@/views/business/comps/template/TemplateTable';
  221. const EmptyDialogData = {
  222. id: '',
  223. name: '',
  224. sn: '',
  225. deptId: '',
  226. status: 10,
  227. needPre: 10,
  228. type: 10,
  229. stepGroupIds: '',
  230. }
  231. export default {
  232. name: "Template",
  233. props: {
  234. },
  235. components: {
  236. SelectDept,
  237. TemplateTable
  238. },
  239. computed: {
  240. },
  241. filters: {
  242. },
  243. data() {
  244. return {
  245. studyTypeArr: [],
  246. studyFormTypeArr: [],
  247. searchForm: {
  248. pageNum: 1,
  249. pageSize: 10,
  250. sn: '',
  251. name: '',
  252. deptId: null,
  253. status: '',
  254. },
  255. loading: true,
  256. total: 0,
  257. list: [],
  258. stepGroupList: [],
  259. stepGroupIdArr: [],
  260. infoDialog: {
  261. title: '',
  262. visible: false,
  263. formData: {
  264. },
  265. rules: {
  266. onlySubmit: [
  267. { required: true, message: '请选择', trigger: "blur" }
  268. ],
  269. showGc: [
  270. { required: true, message: '请选择', trigger: "blur" }
  271. ],
  272. showBlxjsh: [
  273. { required: true, message: '请选择', trigger: "blur" }
  274. ],
  275. sn: [
  276. { required: true, message: '请输入', trigger: "blur" }
  277. ],
  278. name: [
  279. { required: true, message: '请输入', trigger: "blur" }
  280. ],
  281. // nameEn: [
  282. // { required: true, message: '请输入', trigger: "blur" }
  283. // ],
  284. // deptId: [
  285. // { required: true, message: '请选择', trigger: "change" }
  286. // ],
  287. status: [
  288. { required: true, message: '请选择', trigger: "change" }
  289. ],
  290. product: [
  291. { required: true, message: '请选择', trigger: "change" }
  292. ],
  293. needPre: [
  294. { required: true, message: '请选择', trigger: "change" }
  295. ],
  296. type: [
  297. { required: true, message: '请选择', trigger: "change" }
  298. ],
  299. pdfSize: [
  300. { required: true, message: '请选择', trigger: "change" }
  301. ],
  302. showYjcc: [
  303. { required: true, message: '请选择', trigger: "change" }
  304. ],
  305. studyType: [
  306. { required: true, message: '请选择', trigger: "change" }
  307. ],
  308. studyFormType: [
  309. { required: true, message: '请选择', trigger: "change" }
  310. ],
  311. },
  312. },
  313. tableDialog: {
  314. title: '',
  315. visible: false,
  316. templateData: {},
  317. sn: ''
  318. },
  319. };
  320. },
  321. created() {
  322. this.getList();
  323. this.getGroupList()
  324. },
  325. methods: {
  326. getGroupList() {
  327. stepGroup_list({ pageNum: 1, pageSize: 9999 }).then(response => {
  328. this.stepGroupList = response.rows;
  329. });
  330. },
  331. bdpz(row) {
  332. this.saveSimpleLog({ name: row.name + '(' + row.showSn + ')', nameEn: row.name + '(' + row.showSn + ')', jcmc: '模板详情', jcmcEn: 'Function Detail' })
  333. this.tableDialog.title = '表单配制'
  334. this.tableDialog.sn = row.sn
  335. this.tableDialog.templateData.bdmc =this.$i18n.locale === 'zh_CN'? row.name:row.nameEn
  336. this.tableDialog.templateData.templateId = row.id
  337. this.tableDialog.visible = true
  338. },
  339. getList() {
  340. this.loading = true;
  341. template_list(this.searchForm).then(response => {
  342. this.list = response.rows;
  343. this.total = response.total;
  344. this.loading = false;
  345. });
  346. },
  347. search() {
  348. this.searchForm.pageNum = 1;
  349. this.getList();
  350. },
  351. reset() {
  352. this.searchForm = {
  353. pageNum: 1,
  354. pageSize: 10,
  355. sn: '',
  356. name: '',
  357. deptId: null,
  358. status: '',
  359. }
  360. this.search()
  361. },
  362. edit(row) {
  363. this.$refs['infoDialogForm'] && this.$refs['infoDialogForm'].resetFields()
  364. this.infoDialog.title = '新增'
  365. this.infoDialog.formData = _.merge({}, EmptyDialogData)
  366. if (row && row.id) {
  367. this.infoDialog.title = '编辑'
  368. this.$modal.loading()
  369. template_info({ id: row.id }).then(({ data }) => {
  370. this.infoDialog.formData = data
  371. if (this.infoDialog.formData.studyType && this.infoDialog.formData.studyType != '') {
  372. this.studyTypeArr = this.infoDialog.formData.studyType.split(',')
  373. }
  374. if (this.infoDialog.formData.studyFormType && this.infoDialog.formData.studyFormType != '') {
  375. this.studyFormTypeArr = this.infoDialog.formData.studyFormType.split(',')
  376. }
  377. this.stepGroupIdArr = this.infoDialog.formData.stepGroupIds ? _.map(this.infoDialog.formData.stepGroupIds.split(','), (o) => { return parseInt(o) }) : []
  378. }).finally(() => {
  379. this.$modal.closeLoading()
  380. })
  381. }
  382. this.infoDialog.visible = true
  383. // this.infoDialog.title = this.$t('page.system.template.edit')
  384. // this.$modal.loading()
  385. // template_info({id:row.id}).then(({data}) => {
  386. // this.infoDialog.formData = data
  387. // }).finally(() => {
  388. // this.$modal.closeLoading()
  389. // })
  390. },
  391. changeStepGroup(val) {
  392. this.infoDialog.formData.stepGroupIds = val.join(',')
  393. },
  394. studyTypeChange() {
  395. if (this.studyTypeArr && this.studyTypeArr.length > 0) {
  396. this.infoDialog.formData.studyType = this.studyTypeArr.join(',')
  397. } else {
  398. this.infoDialog.formData.studyType = ''
  399. }
  400. },
  401. studyFormTypeChange() {
  402. if (this.studyFormTypeArr && this.studyFormTypeArr.length > 0) {
  403. this.infoDialog.formData.studyFormType = this.studyFormTypeArr.join(',')
  404. } else {
  405. this.infoDialog.formData.studyFormType = ''
  406. }
  407. },
  408. save() {
  409. this.$refs['infoDialogForm'].validate(valid => {
  410. if (valid) {
  411. this.$modal.loading()
  412. template_save(this.infoDialog.formData).then(() => {
  413. this.infoDialog.visible = false
  414. this.getList()
  415. }).finally(() => {
  416. this.$modal.closeLoading()
  417. })
  418. }
  419. })
  420. },
  421. del(row) {
  422. this.$confirm('确定要删除吗', '提示', {
  423. confirmButtonText: '确定',
  424. cancelButtonText: '取消',
  425. type: 'warning'
  426. })
  427. .then(() => {
  428. this.$modal.loading()
  429. template_delete({ id: row.id }).then(() => {
  430. this.getList()
  431. })
  432. .finally(() => {
  433. this.$modal.closeLoading()
  434. })
  435. })
  436. .catch(() => { })
  437. },
  438. }
  439. };
  440. </script>
  441. <style lang="scss"></style>