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

340 lines
13 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" :show-overflow-tooltip="true"/>
  30. <el-table-column :label="$t('page.system.template.sn')" align="center" prop="showSn" :show-overflow-tooltip="true"/>
  31. <el-table-column :label="$t('page.system.template.name')" align="center" prop="name" :show-overflow-tooltip="true"/>
  32. <el-table-column :label="$t('page.system.template.department')" align="center" prop="deptName" />
  33. <el-table-column :label="$t('page.system.template.status')" prop="status" align="center" width="100">
  34. <template slot-scope="scope">
  35. <span v-if="scope.row.status === 10">{{ $t('page.system.template.statusEnable') }}</span>
  36. <span v-if="scope.row.status === 1">{{ $t('page.system.template.statusDisable') }}</span>
  37. </template>
  38. </el-table-column>
  39. <el-table-column label="是否需要预填" prop="needPre" align="center" width="100">
  40. <template slot-scope="scope">
  41. <span v-if="scope.row.needPre === 10"></span>
  42. <span v-if="scope.row.needPre === 1"></span>
  43. </template>
  44. </el-table-column>
  45. <el-table-column label="产物" prop="product" align="center" width="100">
  46. <template slot-scope="scope">
  47. <span v-if="scope.row.product == 1">试剂</span>
  48. <span v-if="scope.row.product == 3">给药制剂</span>
  49. <span v-if="scope.row.product == 5">麻精药</span>
  50. <span v-if="scope.row.product == 7"></span>
  51. </template>
  52. </el-table-column>
  53. <!-- <el-table-column label="模板类型" prop="type" align="center" width="100">
  54. <template slot-scope="scope">
  55. <span v-if="scope.row.type === 10">高风险表单</span>
  56. <span v-if="scope.row.type === 1">普通表单</span>
  57. </template>
  58. </el-table-column> -->
  59. <el-table-column :label="$t('form.operate')" fixed="right" align="center" width="100">
  60. <template slot-scope="scope">
  61. <el-button type="text" @click="edit(scope.row)">{{ $t('page.system.template.bj') }}</el-button>
  62. <el-button type="text" @click="bdpz(scope.row)">{{ $t('page.system.template.detail') }}</el-button>
  63. </template>
  64. </el-table-column>
  65. </el-table>
  66. <pagination v-show="total > 0" :total="total" :page.sync="searchForm.pageNum" :limit.sync="searchForm.pageSize"
  67. @pagination="getList" />
  68. <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :title="infoDialog.title" :visible.sync="infoDialog.visible" width="800px"
  69. append-to-body>
  70. <el-form ref="infoDialogForm" :model="infoDialog.formData" :rules="infoDialog.rules" label-width="180px">
  71. <el-row>
  72. <el-col :span="24">
  73. <el-form-item label="编号:" prop="sn">
  74. <el-input v-model="infoDialog.formData.sn" />
  75. </el-form-item>
  76. </el-col>
  77. <el-col :span="24">
  78. <el-form-item label="名称:" prop="name">
  79. <el-input v-model="infoDialog.formData.name" />
  80. </el-form-item>
  81. </el-col>
  82. <el-col :span="24">
  83. <el-form-item label="部门/学科:" prop="deptId">
  84. <select-dept v-model="infoDialog.formData.deptId" />
  85. </el-form-item>
  86. </el-col>
  87. <el-col :span="24">
  88. <el-form-item label="状态:" prop="status">
  89. <el-select v-model="infoDialog.formData.status" :placeholder="$t('form.placeholderSelect')" style="width:100%">
  90. <el-option label="启用" :value="10" />
  91. <el-option label="禁用" :value="1" />
  92. </el-select>
  93. </el-form-item>
  94. </el-col>
  95. <el-col :span="24">
  96. <el-form-item label="是否需要预填:" prop="needPre">
  97. <el-select v-model="infoDialog.formData.needPre" :placeholder="$t('form.placeholderSelect')" style="width:100%">
  98. <el-option label="是" :value="10" />
  99. <el-option label="否" :value="1" />
  100. </el-select>
  101. </el-form-item>
  102. </el-col>
  103. <el-col :span="24">
  104. <el-form-item label="产物:" prop="product">
  105. <el-select v-model="infoDialog.formData.product" :placeholder="$t('form.placeholderSelect')" style="width:100%">
  106. <el-option label="试剂" :value="1" />
  107. <el-option label="给药制剂" :value="3" />
  108. <el-option label="麻精药" :value="5" />
  109. <el-option label="无" :value="7" />
  110. </el-select>
  111. </el-form-item>
  112. </el-col>
  113. <el-col :span="24">
  114. <el-form-item label="填报是否显示观察按钮:" prop="showGc">
  115. <el-select v-model="infoDialog.formData.showGc" :placeholder="$t('form.placeholderSelect')" style="width:100%">
  116. <el-option label="否" :value="1" />
  117. <el-option label="是" :value="10" />
  118. </el-select>
  119. </el-form-item>
  120. </el-col>
  121. <!-- <el-col :span="24">
  122. <el-form-item label="类型:" prop="type">
  123. <el-select v-model="infoDialog.formData.type" :placeholder="$t('form.placeholderSelect')" style="width:100%">
  124. <el-option label="普通表单" :value="1" />
  125. <el-option label="高风险表单" :value="10" />
  126. </el-select>
  127. </el-form-item>
  128. </el-col> -->
  129. <el-col :span="24">
  130. <el-form-item label="步骤库:" prop="stepGroupIds">
  131. <el-select multiple v-model="stepGroupIdArr" :placeholder="$t('form.placeholderSelect')" style="width:100%" @change="changeStepGroup">
  132. <el-option v-for="item in stepGroupList" :key="item.id" :label="item.name" :value="item.id" />
  133. </el-select>
  134. </el-form-item>
  135. </el-col>
  136. </el-row>
  137. </el-form>
  138. <div slot="footer" class="dialog-footer">
  139. <el-button type="primary" @click="save"> </el-button>
  140. <el-button @click="infoDialog.visible = false"> </el-button>
  141. </div>
  142. </el-dialog>
  143. <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :title="$t('page.system.template.bdpz')" :visible.sync="tableDialog.visible"
  144. width="90%" append-to-body>
  145. <TemplateTable ref = "templateTable" :sn="tableDialog.sn" v-if="tableDialog.visible" fillType="preFill" />
  146. </el-dialog>
  147. </div>
  148. </template>
  149. <script>
  150. import { template_list, template_info, template_save, template_delete } from "@/api/business/template/template";
  151. import { stepGroup_list } from "@/api/business/step/step";
  152. import SelectDept from '@/views/business/comps/select/SelectDept.vue';
  153. import TemplateTable from '@/views/business/comps/template/TemplateTable';
  154. const EmptyDialogData = {
  155. id: '',
  156. name: '',
  157. sn: '',
  158. deptId: '',
  159. status:10,
  160. needPre: 10,
  161. type: 10,
  162. stepGroupIds: '',
  163. }
  164. export default {
  165. name: "Template",
  166. props: {
  167. },
  168. components: {
  169. SelectDept,
  170. TemplateTable
  171. },
  172. computed: {
  173. },
  174. filters: {
  175. },
  176. data() {
  177. return {
  178. searchForm: {
  179. pageNum: 1,
  180. pageSize: 10,
  181. sn: '',
  182. name: '',
  183. deptId: null,
  184. status: '',
  185. },
  186. loading: true,
  187. total: 0,
  188. list: [],
  189. stepGroupList:[],
  190. stepGroupIdArr:[],
  191. infoDialog: {
  192. title: '',
  193. visible: false,
  194. formData: {
  195. },
  196. rules: {
  197. showGc: [
  198. { required: true, message:'请选择', trigger: "blur" }
  199. ],
  200. sn: [
  201. { required: true, message:'请输入', trigger: "blur" }
  202. ],
  203. name: [
  204. { required: true, message:'请输入', trigger: "blur" }
  205. ],
  206. deptId: [
  207. { required: true, message:'请选择', trigger: "change" }
  208. ],
  209. status: [
  210. { required: true, message:'请选择', trigger: "change" }
  211. ],
  212. product: [
  213. { required: true, message:'请选择', trigger: "change" }
  214. ],
  215. needPre: [
  216. { required: true, message:'请选择', trigger: "change" }
  217. ],
  218. type: [
  219. { required: true, message:'请选择', trigger: "change" }
  220. ],
  221. },
  222. },
  223. tableDialog: {
  224. title: '',
  225. visible: false,
  226. sn: ''
  227. },
  228. };
  229. },
  230. created() {
  231. this.getList();
  232. this.getGroupList()
  233. },
  234. methods: {
  235. getGroupList(){
  236. stepGroup_list({ pageNum: 1, pageSize:9999}).then(response => {
  237. this.stepGroupList = response.rows;
  238. });
  239. },
  240. bdpz(row) {
  241. this.tableDialog.title = '表单配置'
  242. this.tableDialog.sn=row.sn
  243. this.tableDialog.visible=true
  244. },
  245. getList() {
  246. this.loading = true;
  247. template_list(this.searchForm).then(response => {
  248. this.list = response.rows;
  249. this.total = response.total;
  250. this.loading = false;
  251. });
  252. },
  253. search() {
  254. this.searchForm.pageNum = 1;
  255. this.getList();
  256. },
  257. reset() {
  258. this.searchForm = {
  259. pageNum: 1,
  260. pageSize: 10,
  261. sn: '',
  262. name: '',
  263. deptId: null,
  264. status: '',
  265. }
  266. this.search()
  267. },
  268. edit(row) {
  269. this.$refs['infoDialogForm'] && this.$refs['infoDialogForm'].resetFields()
  270. this.infoDialog.title = '新增'
  271. this.infoDialog.formData = _.merge({}, EmptyDialogData)
  272. if (row && row.id) {
  273. this.infoDialog.title = '编辑'
  274. this.$modal.loading()
  275. template_info({ id: row.id }).then(({ data }) => {
  276. this.infoDialog.formData = data
  277. this.stepGroupIdArr = this.infoDialog.formData.stepGroupIds ? _.map(this.infoDialog.formData.stepGroupIds.split(','),(o)=>{return parseInt(o)}): []
  278. }).finally(() => {
  279. this.$modal.closeLoading()
  280. })
  281. }
  282. this.infoDialog.visible = true
  283. // this.infoDialog.title = this.$t('page.system.template.edit')
  284. // this.$modal.loading()
  285. // template_info({id:row.id}).then(({data}) => {
  286. // this.infoDialog.formData = data
  287. // }).finally(() => {
  288. // this.$modal.closeLoading()
  289. // })
  290. },
  291. changeStepGroup(val){
  292. this.infoDialog.formData.stepGroupIds = val.join(',')
  293. },
  294. save() {
  295. this.$refs['infoDialogForm'].validate(valid => {
  296. if (valid) {
  297. this.$modal.loading()
  298. template_save(this.infoDialog.formData).then(() => {
  299. this.infoDialog.visible = false
  300. this.getList()
  301. }).finally(() => {
  302. this.$modal.closeLoading()
  303. })
  304. }
  305. })
  306. },
  307. del(row) {
  308. this.$confirm('确定要删除吗', '提示', {
  309. confirmButtonText: '确定',
  310. cancelButtonText: '取消',
  311. type: 'warning'
  312. })
  313. .then(() => {
  314. this.$modal.loading()
  315. template_delete({ id: row.id }).then(() => {
  316. this.getList()
  317. })
  318. .finally(() => {
  319. this.$modal.closeLoading()
  320. })
  321. })
  322. .catch(() => { })
  323. },
  324. }
  325. };
  326. </script>
  327. <style lang="scss"></style>