华西海圻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.

443 lines
17 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="showBlxjsh">
  138. <el-select v-model="infoDialog.formData.showBlxjsh" :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="studyType">
  147. <el-select v-model="studyTypeArr" multiple @change="studyTypeChange"
  148. :placeholder="$t('form.placeholderSelect')" style="width:100%">
  149. <el-option label="试验" value="1" />
  150. <el-option label="非试验" value="5" />
  151. <el-option label="麻精药表单" value="10" />
  152. </el-select>
  153. </el-form-item>
  154. </el-col>
  155. <el-col :span="24">
  156. <el-form-item label="所属表单类型:" prop="studyFormType">
  157. <el-select v-model="studyFormTypeArr" multiple @change="studyFormTypeChange"
  158. :placeholder="$t('form.placeholderSelect')" style="width:100%">
  159. <el-option label="预填表单" value="1" />
  160. <el-option label="填报表单" value="5" />
  161. <el-option label="配制计划表" value="10" />
  162. <el-option label="领取申请单" value="15" />
  163. </el-select>
  164. </el-form-item>
  165. </el-col>
  166. <el-col :span="24">
  167. <el-form-item label="pdf导出大小:" prop="pdfSize">
  168. <el-select v-model="infoDialog.formData.pdfSize" :placeholder="$t('form.placeholderSelect')"
  169. style="width:100%">
  170. <el-option label="a1" value="a1" />
  171. <el-option label="a2" value="a2" />
  172. <el-option label="a3" value="a3" />
  173. <el-option label="a4" value="a4" />
  174. </el-select>
  175. </el-form-item>
  176. </el-col>
  177. <!-- <el-col :span="24">
  178. <el-form-item label="类型:" prop="type">
  179. <el-select v-model="infoDialog.formData.type" :placeholder="$t('form.placeholderSelect')" style="width:100%">
  180. <el-option label="普通表单" :value="1" />
  181. <el-option label="高风险表单" :value="10" />
  182. </el-select>
  183. </el-form-item>
  184. </el-col> -->
  185. <el-col :span="24">
  186. <el-form-item label="步骤库:" prop="stepGroupIds">
  187. <el-select multiple v-model="stepGroupIdArr" :placeholder="$t('form.placeholderSelect')"
  188. style="width:100%" @change="changeStepGroup" filterable>
  189. <el-option v-for="item in stepGroupList" :key="item.id" :label="item.name" :value="item.id" />
  190. </el-select>
  191. </el-form-item>
  192. </el-col>
  193. </el-row>
  194. </el-form>
  195. <div slot="footer" class="dialog-footer">
  196. <el-button type="primary" @click="save"> </el-button>
  197. <el-button @click="infoDialog.visible = false"> </el-button>
  198. </div>
  199. </el-dialog>
  200. <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :title="$t('page.system.template.bdpz')"
  201. :visible.sync="tableDialog.visible" width="90%" append-to-body>
  202. <TemplateTable ref="templateTable" :sn="tableDialog.sn" :templateData="tableDialog.templateData"
  203. v-if="tableDialog.visible" fillType="preFill" />
  204. </el-dialog>
  205. </div>
  206. </template>
  207. <script>
  208. import { template_list, template_info, template_save, template_delete } from "@/api/business/template/template";
  209. import { stepGroup_list } from "@/api/business/step/step";
  210. import SelectDept from '@/views/business/comps/select/SelectDept.vue';
  211. import TemplateTable from '@/views/business/comps/template/TemplateTable';
  212. const EmptyDialogData = {
  213. id: '',
  214. name: '',
  215. sn: '',
  216. deptId: '',
  217. status: 10,
  218. needPre: 10,
  219. type: 10,
  220. stepGroupIds: '',
  221. }
  222. export default {
  223. name: "Template",
  224. props: {
  225. },
  226. components: {
  227. SelectDept,
  228. TemplateTable
  229. },
  230. computed: {
  231. },
  232. filters: {
  233. },
  234. data() {
  235. return {
  236. studyTypeArr: [],
  237. studyFormTypeArr: [],
  238. searchForm: {
  239. pageNum: 1,
  240. pageSize: 10,
  241. sn: '',
  242. name: '',
  243. deptId: null,
  244. status: '',
  245. },
  246. loading: true,
  247. total: 0,
  248. list: [],
  249. stepGroupList: [],
  250. stepGroupIdArr: [],
  251. infoDialog: {
  252. title: '',
  253. visible: false,
  254. formData: {
  255. },
  256. rules: {
  257. showGc: [
  258. { required: true, message: '请选择', trigger: "blur" }
  259. ],
  260. showBlxjsh: [
  261. { required: true, message: '请选择', trigger: "blur" }
  262. ],
  263. sn: [
  264. { required: true, message: '请输入', trigger: "blur" }
  265. ],
  266. name: [
  267. { required: true, message: '请输入', trigger: "blur" }
  268. ],
  269. // nameEn: [
  270. // { required: true, message: '请输入', trigger: "blur" }
  271. // ],
  272. // deptId: [
  273. // { required: true, message: '请选择', trigger: "change" }
  274. // ],
  275. status: [
  276. { required: true, message: '请选择', trigger: "change" }
  277. ],
  278. product: [
  279. { required: true, message: '请选择', trigger: "change" }
  280. ],
  281. needPre: [
  282. { required: true, message: '请选择', trigger: "change" }
  283. ],
  284. type: [
  285. { required: true, message: '请选择', trigger: "change" }
  286. ],
  287. pdfSize: [
  288. { required: true, message: '请选择', trigger: "change" }
  289. ],
  290. showYjcc: [
  291. { required: true, message: '请选择', trigger: "change" }
  292. ],
  293. studyType: [
  294. { required: true, message: '请选择', trigger: "change" }
  295. ],
  296. studyFormType: [
  297. { required: true, message: '请选择', trigger: "change" }
  298. ],
  299. },
  300. },
  301. tableDialog: {
  302. title: '',
  303. visible: false,
  304. templateData: {},
  305. sn: ''
  306. },
  307. };
  308. },
  309. created() {
  310. this.getList();
  311. this.getGroupList()
  312. },
  313. methods: {
  314. getGroupList() {
  315. stepGroup_list({ pageNum: 1, pageSize: 9999 }).then(response => {
  316. this.stepGroupList = response.rows;
  317. });
  318. },
  319. bdpz(row) {
  320. this.saveSimpleLog({ name: row.name + '(' + row.showSn + ')', nameEn: row.name + '(' + row.showSn + ')', jcmc: '模板详情', jcmcEn: 'Function Detail' })
  321. this.tableDialog.title = '表单配制'
  322. this.tableDialog.sn = row.sn
  323. this.tableDialog.templateData.bdmc =this.$i18n.locale === 'zh_CN'? row.name:row.nameEn
  324. this.tableDialog.templateData.templateId = row.id
  325. this.tableDialog.visible = true
  326. },
  327. getList() {
  328. this.loading = true;
  329. template_list(this.searchForm).then(response => {
  330. this.list = response.rows;
  331. this.total = response.total;
  332. this.loading = false;
  333. });
  334. },
  335. search() {
  336. this.searchForm.pageNum = 1;
  337. this.getList();
  338. },
  339. reset() {
  340. this.searchForm = {
  341. pageNum: 1,
  342. pageSize: 10,
  343. sn: '',
  344. name: '',
  345. deptId: null,
  346. status: '',
  347. }
  348. this.search()
  349. },
  350. edit(row) {
  351. this.$refs['infoDialogForm'] && this.$refs['infoDialogForm'].resetFields()
  352. this.infoDialog.title = '新增'
  353. this.infoDialog.formData = _.merge({}, EmptyDialogData)
  354. if (row && row.id) {
  355. this.infoDialog.title = '编辑'
  356. this.$modal.loading()
  357. template_info({ id: row.id }).then(({ data }) => {
  358. this.infoDialog.formData = data
  359. if (this.infoDialog.formData.studyType && this.infoDialog.formData.studyType != '') {
  360. this.studyTypeArr = this.infoDialog.formData.studyType.split(',')
  361. }
  362. if (this.infoDialog.formData.studyFormType && this.infoDialog.formData.studyFormType != '') {
  363. this.studyFormTypeArr = this.infoDialog.formData.studyFormType.split(',')
  364. }
  365. this.stepGroupIdArr = this.infoDialog.formData.stepGroupIds ? _.map(this.infoDialog.formData.stepGroupIds.split(','), (o) => { return parseInt(o) }) : []
  366. }).finally(() => {
  367. this.$modal.closeLoading()
  368. })
  369. }
  370. this.infoDialog.visible = true
  371. // this.infoDialog.title = this.$t('page.system.template.edit')
  372. // this.$modal.loading()
  373. // template_info({id:row.id}).then(({data}) => {
  374. // this.infoDialog.formData = data
  375. // }).finally(() => {
  376. // this.$modal.closeLoading()
  377. // })
  378. },
  379. changeStepGroup(val) {
  380. this.infoDialog.formData.stepGroupIds = val.join(',')
  381. },
  382. studyTypeChange() {
  383. if (this.studyTypeArr && this.studyTypeArr.length > 0) {
  384. this.infoDialog.formData.studyType = this.studyTypeArr.join(',')
  385. } else {
  386. this.infoDialog.formData.studyType = ''
  387. }
  388. },
  389. studyFormTypeChange() {
  390. if (this.studyFormTypeArr && this.studyFormTypeArr.length > 0) {
  391. this.infoDialog.formData.studyFormType = this.studyFormTypeArr.join(',')
  392. } else {
  393. this.infoDialog.formData.studyFormType = ''
  394. }
  395. },
  396. save() {
  397. this.$refs['infoDialogForm'].validate(valid => {
  398. if (valid) {
  399. this.$modal.loading()
  400. template_save(this.infoDialog.formData).then(() => {
  401. this.infoDialog.visible = false
  402. this.getList()
  403. }).finally(() => {
  404. this.$modal.closeLoading()
  405. })
  406. }
  407. })
  408. },
  409. del(row) {
  410. this.$confirm('确定要删除吗', '提示', {
  411. confirmButtonText: '确定',
  412. cancelButtonText: '取消',
  413. type: 'warning'
  414. })
  415. .then(() => {
  416. this.$modal.loading()
  417. template_delete({ id: row.id }).then(() => {
  418. this.getList()
  419. })
  420. .finally(() => {
  421. this.$modal.closeLoading()
  422. })
  423. })
  424. .catch(() => { })
  425. },
  426. }
  427. };
  428. </script>
  429. <style lang="scss"></style>