addInspection.vue 14KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470
  1. <template>
  2. <el-dialog
  3. :title="formTitle"
  4. width="900px"
  5. :visible.sync="visible"
  6. :before-close="_close"
  7. >
  8. <div>
  9. <el-form
  10. :model="form"
  11. :rules="rules"
  12. ref="form"
  13. label-width="100px"
  14. style="display: flex; flex-wrap: wrap; justify-content: space-between"
  15. >
  16. <el-form-item
  17. label="组套名称 : "
  18. prop="project_team"
  19. style="width: 100%"
  20. >
  21. <el-input
  22. v-model="form.project_team"
  23. placeholder=""
  24. maxlength="30"
  25. ></el-input>
  26. </el-form-item>
  27. <el-form-item label="组套价格 : " prop="price" style="width: 100%">
  28. <el-input
  29. v-model="form.price"
  30. placeholder=""
  31. maxlength="30"
  32. ></el-input>
  33. </el-form-item>
  34. <el-form-item label="拼音 : " prop="pinyin" style="width: 50%">
  35. <el-input
  36. v-model="form.pinyin"
  37. placeholder=""
  38. maxlength="30"
  39. ></el-input>
  40. </el-form-item>
  41. <el-form-item label="五笔 : " prop="wubi" style="width: 50%">
  42. <el-input
  43. v-model="form.wubi"
  44. placeholder=""
  45. maxlength="30"
  46. ></el-input>
  47. </el-form-item>
  48. <el-form-item label="试管颜色 : " prop="tube_color" style="width: 50%">
  49. <el-select
  50. v-model="form.tube_color"
  51. style="width: 160px"
  52. placeholder="请选择"
  53. >
  54. <el-option
  55. v-for="(item, index) in getDictionaryDataConfig(
  56. 'system',
  57. 'tube_color'
  58. )"
  59. :key="index"
  60. :label="item.name"
  61. :value="item.id"
  62. >
  63. </el-option>
  64. </el-select>
  65. </el-form-item>
  66. <el-form-item label="组套类型 : " prop="team_type" style="width: 50%">
  67. <el-select
  68. v-model="form.team_type"
  69. style="width: 100%"
  70. placeholder="请选择"
  71. >
  72. <el-option
  73. v-for="item in options"
  74. :key="item.value"
  75. :label="item.label"
  76. :value="item.value"
  77. >
  78. </el-option>
  79. </el-select>
  80. </el-form-item>
  81. <el-form-item label="排序 : " prop="sort" style="width: 50%">
  82. <el-input
  83. v-model="form.sort"
  84. placeholder=""
  85. maxlength="30"
  86. ></el-input>
  87. </el-form-item>
  88. <el-form-item label="备注 : " prop="name" style="width: 100%">
  89. <el-input
  90. type="textarea"
  91. :rows="2"
  92. placeholder="请输入内容"
  93. v-model="form.remark"
  94. ></el-input>
  95. </el-form-item>
  96. <el-form-item label="组套明细" style="width: 50%">
  97. <el-select
  98. v-model="form.project_detail"
  99. filterable
  100. placeholder="请选择"
  101. @change="changeProject"
  102. >
  103. <el-option
  104. v-for="item in projectList"
  105. :key="item.new_id"
  106. :label="item.project_name"
  107. :value="item.new_id"
  108. >
  109. </el-option>
  110. </el-select>
  111. </el-form-item>
  112. <el-form-item label="数量" style="width: 50%">
  113. <div style="display: flex">
  114. <el-input
  115. v-model="form.number"
  116. style="margin-right: 10px"
  117. ></el-input>
  118. <el-button type="primary" @click="addProjectList">添加</el-button>
  119. </div>
  120. </el-form-item>
  121. </el-form>
  122. <el-form>
  123. <el-table
  124. :data="tableData"
  125. border
  126. style="100%"
  127. :row-style="{ color: '#303133' }"
  128. :header-cell-style="{
  129. backgroundColor: 'rgb(245, 247, 250)',
  130. color: '#606266',
  131. }"
  132. highlight-current-row
  133. ref="tab"
  134. >
  135. <el-table-column align="center" prop="name" label="分类" width="120">
  136. <template slot-scope="scope">
  137. <div>
  138. {{
  139. scope.row.type == 2
  140. ? getId(scope.row.statistical_classification)
  141. : "耗材"
  142. }}
  143. </div>
  144. </template>
  145. </el-table-column>
  146. <el-table-column
  147. align="center"
  148. prop="name"
  149. label="组套明细"
  150. width="120"
  151. >
  152. <template slot-scope="scope">{{ scope.row.project_name }}</template>
  153. </el-table-column>
  154. <el-table-column align="center" prop="name" label="数量" width="120">
  155. <template slot-scope="scope">{{ scope.row.number }}</template>
  156. </el-table-column>
  157. <el-table-column align="center" prop="name" label="单位" width="120">
  158. <template slot-scope="scope">
  159. <div v-if="scope.row.type == 2">{{ scope.row.unit }}</div>
  160. <div v-if="scope.row.type == 3">
  161. {{ scope.row.unit }}
  162. </div>
  163. </template>
  164. </el-table-column>
  165. <el-table-column align="center" prop="name" label="单价" width="120">
  166. <template slot-scope="scope">{{ scope.row.price }}</template>
  167. </el-table-column>
  168. <el-table-column align="center" prop="name" label="操作">
  169. <template slot-scope="scope">
  170. <el-tooltip
  171. class="item"
  172. effect="dark"
  173. content="删除"
  174. placement="top"
  175. >
  176. <el-button
  177. type="danger"
  178. icon="el-icon-delete"
  179. size="small"
  180. @click="DeleteProject(scope.row.id, scope.$index)"
  181. ></el-button>
  182. </el-tooltip>
  183. </template>
  184. </el-table-column>
  185. </el-table>
  186. </el-form>
  187. </div>
  188. <div slot="footer" class="dialog-footer">
  189. <el-button @click="hide">取 消</el-button>
  190. <el-button type="primary" @click="submitAction('form')">保 存</el-button>
  191. </div>
  192. </el-dialog>
  193. </template>
  194. <script>
  195. import { getDataConfig, getDictionaryDataConfig } from "@/utils/data";
  196. import {
  197. addProjectList,
  198. DeleteProject,
  199. getAllProjectList,
  200. getProjectDetail,
  201. saveProjectTeam,
  202. } from "@/api/project/project";
  203. import { saveTeam } from "@/api/his/his";
  204. export default {
  205. data() {
  206. return {
  207. project_name: "",
  208. visible: false,
  209. formTitle: "",
  210. activeName: "first",
  211. form: {
  212. project_team: "",
  213. price: 0,
  214. pinyin: "",
  215. wubi: "",
  216. tube_color: "",
  217. team_type: "",
  218. remark: "",
  219. project_detail: "",
  220. number: "1",
  221. sort:0,
  222. },
  223. options: [
  224. { value: 1, label: "是" },
  225. { value: 2, label: "否" },
  226. ],
  227. value: "",
  228. radio: "1",
  229. rules: {
  230. project_team: [
  231. { required: true, message: "请填写组套名称", trigger: "blur" },
  232. ],
  233. // pinyin: [{ required: true, message: '请填写拼音' , trigger: 'blur' }],
  234. // wubi: [{ required: true, message: '请填写五笔' , trigger: 'blur' }],
  235. price: [{ required: true, message: "请填写价格", trigger: "change" }],
  236. //team_type: [{ required: true, message: '请填写组套类型', trigger: 'change' }]
  237. },
  238. tableData: [],
  239. projectList: [],
  240. tabList: [],
  241. itemList: [],
  242. };
  243. },
  244. methods: {
  245. getUnit(id) {
  246. var arr = getDataConfig("hemodialysis", "units");
  247. for (let i = 0; i < arr.length; i++) {
  248. if (id == arr[i].id) {
  249. return arr[i].name;
  250. }
  251. }
  252. },
  253. changeProject(val) {
  254. this.form.number = 1;
  255. },
  256. querySearch(queryString, cb) {
  257. var restaurants = this.projectList;
  258. var results = queryString
  259. ? restaurants.filter(this.createFilter(queryString))
  260. : restaurants;
  261. // 调用 callback 返回建议列表的数据
  262. cb(results);
  263. },
  264. createFilter(queryString) {
  265. return (restaurant) => {
  266. return (
  267. restaurant.project_name
  268. .toLowerCase()
  269. .indexOf(queryString.toLowerCase()) === 0
  270. );
  271. };
  272. },
  273. handleSelect(val) {
  274. this.project_name = val.project_name;
  275. this.form.project_detail = val.id;
  276. },
  277. getDataConfig(module, filed_name) {
  278. return getDataConfig(module, filed_name);
  279. },
  280. getDictionaryDataConfig(module, filed_name) {
  281. return getDictionaryDataConfig(module, filed_name);
  282. },
  283. _close: function (done) {
  284. done();
  285. },
  286. clear: function () {
  287. this.form.id = 0;
  288. this.form.name = "";
  289. this.form.intro = "";
  290. },
  291. show(id) {
  292. this.visible = true;
  293. this.formTitle = "新增";
  294. },
  295. hide() {
  296. this.visible = false;
  297. },
  298. submitAction(formName) {
  299. this.$refs[formName].validate((valid) => {
  300. var params = {
  301. project_team: this.form.project_team,
  302. price: this.form.price,
  303. pinyin: this.form.pinyin,
  304. wubi: this.form.wubi,
  305. tube_color: this.form.tube_color,
  306. team_type: this.form.team_type,
  307. remark: this.form.remark,
  308. sort:parseInt(this.form.sort),
  309. };
  310. let data = {
  311. info: this.tableData,
  312. };
  313. saveTeam(data, params).then((response) => {
  314. if (response.data.state == 1) {
  315. var projectTeam = response.data.data.projectTeam;
  316. this.$message.success("保存成功");
  317. this.visible = false;
  318. this.form.project_team = "",
  319. this.form.price = "",
  320. this.form.pinyin = "",
  321. this.form.wubi = "",
  322. this.form.tube_color = "",
  323. this.form.team_type = "",
  324. this.form.remark = "";
  325. this.tableData = [];
  326. this.form.number = "";
  327. this.form.sort = ""
  328. this.$parent.getlist();
  329. } else {
  330. this.$message.error("项目组套名称已存在!");
  331. }
  332. });
  333. });
  334. },
  335. getlist() {
  336. let params = {
  337. keyword: "",
  338. };
  339. getAllProjectList(params).then((response) => {
  340. if (response.data.state == 1) {
  341. var projectList = response.data.data.projectList;
  342. var goodInfos = response.data.data.good_info;
  343. for (let i = 0; i < projectList.length; i++) {
  344. let obj = {
  345. id: projectList[i].id,
  346. statistical_classification:
  347. projectList[i].statistical_classification,
  348. number: "1",
  349. project_name: projectList[i].project_name,
  350. unit: projectList[i].unit,
  351. price: projectList[i].price,
  352. type: 2,
  353. new_id: Math.floor(
  354. (Math.random() + Math.floor(Math.random() * 9 + 1)) *
  355. Math.pow(10, 10 - 1)
  356. ),
  357. };
  358. this.projectList.push(obj);
  359. }
  360. for (let i = 0; i < goodInfos.length; i++) {
  361. let obj = {
  362. id: goodInfos[i].id,
  363. statistical_classification:goodInfos[i].statistical_classification,
  364. number: "1",
  365. project_name:goodInfos[i].good_name + " " + goodInfos[i].specification_name,
  366. unit: goodInfos[i].packing_unit,
  367. price: goodInfos[i].retail_price,
  368. type: 3,
  369. new_id: Math.floor(
  370. (Math.random() + Math.floor(Math.random() * 9 + 1)) *
  371. Math.pow(10, 10 - 1)
  372. ),
  373. };
  374. this.projectList.push(obj);
  375. }
  376. }
  377. });
  378. },
  379. getId(id) {
  380. var name = "";
  381. var statistics_category = getDictionaryDataConfig(
  382. "system",
  383. "statistics_category"
  384. );
  385. for (let i = 0; i < statistics_category.length; i++) {
  386. if (id == statistics_category[i].id) {
  387. name = statistics_category[i].name;
  388. }
  389. }
  390. return name;
  391. },
  392. chagneInspection(id) {
  393. getProjectDetail(id).then((response) => {
  394. if (response.data.state == 1) {
  395. var projectdetail = response.data.data.projecDetail;
  396. this.tableData.push(projectdetail);
  397. }
  398. });
  399. },
  400. addProjectList() {
  401. if(this.tableData.length > 0){
  402. for(let i=0;i<this.tableData.length;i++){
  403. if(this.tableData[i].new_id == this.form.project_detail){
  404. this.$message.error("项目名称已存在")
  405. return
  406. }
  407. }
  408. }
  409. console.log("project_232332323232323232",this.projectList)
  410. for (let i = 0; i < this.projectList.length; i++) {
  411. if (this.form.project_detail == this.projectList[i].new_id) {
  412. this.projectList[i].number = this.form.number
  413. this.projectList[i].number = this.projectList[i].number.toString()
  414. this.tableData.push(this.projectList[i])
  415. this.form.project_detail = ''
  416. this.form.number = 1
  417. }
  418. }
  419. },
  420. DeleteProject(id, index) {
  421. this.$confirm("确认删除此项目吗?", "删除", {
  422. confirmButtonText: "确 定",
  423. cancelButtonText: "取 消",
  424. type: "warning",
  425. })
  426. .then(() => {
  427. this.tableData.splice(index, 1);
  428. })
  429. .catch(() => {});
  430. },
  431. },
  432. created() {
  433. //获取所以的项目
  434. this.getlist();
  435. },
  436. watch: {
  437. tableData: function () {
  438. let c = 0;
  439. this.form.price = 0;
  440. for (let i = 0; i < this.tableData.length; i++) {
  441. let a = parseFloat(this.tableData[i].number).toFixed(2);
  442. let b = parseFloat(this.tableData[i].price).toFixed(2);
  443. c = c + this.form.price + a * b;
  444. }
  445. this.form.price = c.toFixed(2);
  446. },
  447. },
  448. };
  449. </script>