orderAuditDetail.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581
  1. <template>
  2. <div>
  3. <el-form :inline="true" ref="ruleForm">
  4. <div class="lookTitle">申请信息</div>
  5. <el-form-item label="申请人" label-width="80px">
  6. <div style="width: 180px">
  7. <p v-if="form.operator && form.operator.username">
  8. {{ form.operator.username }}
  9. </p>
  10. </div>
  11. </el-form-item>
  12. <el-form-item label="申请时间" label-width="80px">
  13. <div style="width: 180px">{{ form.createTime }}</div>
  14. </el-form-item>
  15. </el-form>
  16. <el-form :model="form" ref="ruleForm">
  17. <div class="lookTitle">基本信息</div>
  18. <el-form-item
  19. label="所属分部"
  20. :rules="[{ required: true, message: '请选择分部', trigger: 'change' }]"
  21. prop="routeOrganId"
  22. :label-width="formLabelWidth"
  23. >
  24. <!-- -->
  25. <el-select
  26. v-model.trim="form.routeOrganId"
  27. :disabled="!isAdd"
  28. @change="changeOrgin"
  29. style="width: 100% !important"
  30. >
  31. <el-option
  32. v-for="(item, index) in selects.branchs"
  33. :key="index"
  34. :label="item.name"
  35. :value="item.id"
  36. ></el-option>
  37. </el-select>
  38. </el-form-item>
  39. <el-form-item
  40. label="所属学校"
  41. prop="schoolId"
  42. :label-width="formLabelWidth"
  43. >
  44. <!-- @change="checkSchool" -->
  45. <el-select
  46. v-model="form.schoolId"
  47. :disabled="!isAdd"
  48. style="width: 100% !important"
  49. >
  50. <el-option
  51. v-for="(item, index) in cooperationList"
  52. :key="index"
  53. :label="item.name"
  54. :value="item.id"
  55. ></el-option>
  56. </el-select>
  57. </el-form-item>
  58. <!-- 订单类型 -->
  59. <el-form-item
  60. label="订单类型"
  61. prop="insertOrderType"
  62. :label-width="formLabelWidth"
  63. >
  64. <el-radio-group v-model="insertOrderType" :disabled="!isAdd">
  65. <el-radio :label="1">个人订单</el-radio>
  66. <el-radio :label="2">学校订单</el-radio>
  67. <el-radio :label="3">其它订单</el-radio>
  68. </el-radio-group>
  69. </el-form-item>
  70. <el-form-item
  71. label="缴费单号"
  72. prop="calenderId"
  73. v-if="insertOrderType == 2 || insertOrderType == 3"
  74. :label-width="formLabelWidth"
  75. :rules="[
  76. {
  77. pattern: /^[0-9]*$/,
  78. message: '请输入正确的缴费单号',
  79. trigger: 'blur'
  80. }
  81. ]"
  82. >
  83. <el-input
  84. v-model.trim="form.calenderId"
  85. :disabled="!isAdd"
  86. placeholder="请输入缴费单号"
  87. ></el-input>
  88. </el-form-item>
  89. <el-form-item
  90. label="学员编号"
  91. prop="userId"
  92. v-if="insertOrderType == 1 || insertOrderType == 3"
  93. :label-width="formLabelWidth"
  94. >
  95. <el-input
  96. v-model.trim="form.userId"
  97. :disabled="!isAdd"
  98. placeholder="请输入学员编号"
  99. ></el-input>
  100. </el-form-item>
  101. <div class="lookTitle">交易信息</div>
  102. <el-form-item
  103. label="交易流水号"
  104. :rules="[
  105. { required: true, message: '请输入流水号', trigger: 'change' }
  106. ]"
  107. prop="transNo"
  108. :label-width="formLabelWidth"
  109. >
  110. <el-input
  111. placeholder="请输入交易流水号"
  112. type="text"
  113. :disabled="!isAdd"
  114. v-model.trim="form.transNo"
  115. ></el-input>
  116. </el-form-item>
  117. <el-form-item
  118. label="收款账户"
  119. prop="merNo"
  120. :rules="[
  121. { required: true, message: '请输入收款账户', trigger: 'change' }
  122. ]"
  123. :label-width="formLabelWidth"
  124. >
  125. <el-input
  126. placeholder="请输入收款账户"
  127. type="text"
  128. :disabled="!isAdd"
  129. v-model.trim="form.merNo"
  130. ></el-input>
  131. </el-form-item>
  132. <el-form-item
  133. label="交易日期"
  134. :rules="[
  135. { required: true, message: '请选择交易日期', trigger: 'change' }
  136. ]"
  137. prop="payTime"
  138. :label-width="formLabelWidth"
  139. >
  140. <el-date-picker
  141. style="width: 100%"
  142. :disabled="!isAdd"
  143. v-model="form.payTime"
  144. type="datetime"
  145. format="yyyy-MM-dd HH:mm:ss"
  146. value-format="yyyy-MM-dd HH:mm:ss"
  147. placeholder="选择交易日期"
  148. >
  149. </el-date-picker>
  150. </el-form-item>
  151. <el-form-item
  152. label="收入类型"
  153. :label-width="formLabelWidth"
  154. :rules="[
  155. { required: true, message: '请选收入类型', trigger: 'change' }
  156. ]"
  157. prop="applyType"
  158. >
  159. <el-select
  160. class="multiple"
  161. style="width: 100% !important"
  162. v-model.trim="form.applyType"
  163. filterable
  164. clearable
  165. :disabled="!isAdd"
  166. placeholder="请选择收入类型"
  167. >
  168. <el-option
  169. v-for="(item, index) in orderServerList"
  170. :key="index"
  171. :label="item.label"
  172. :value="item.value"
  173. ></el-option>
  174. </el-select>
  175. </el-form-item>
  176. <el-form-item
  177. label="销售金额"
  178. prop="saleAmount"
  179. :rules="[
  180. { required: true, message: '请输入销售金额', trigger: 'change' }
  181. ]"
  182. v-if="form.applyType == 'SELL'"
  183. :label-width="formLabelWidth"
  184. >
  185. <el-input
  186. v-model="form.saleAmount"
  187. @mousewheel.native.prevent
  188. type="number"
  189. :disabled="!isAdd"
  190. placeholder="请输入销售金额"
  191. />
  192. </el-form-item>
  193. <el-form-item
  194. label="服务金额"
  195. v-if="form.applyType == 'SERVICE'"
  196. :rules="[
  197. { required: true, message: '请输入服务金额', trigger: 'change' }
  198. ]"
  199. prop="serviceAmount"
  200. :label-width="formLabelWidth"
  201. >
  202. <el-input
  203. type="number"
  204. @mousewheel.native.prevent
  205. :disabled="!isAdd"
  206. v-model="form.serviceAmount"
  207. placeholder="请输入收入金额"
  208. />
  209. </el-form-item>
  210. <div v-if="form.applyType == 'SELL'">
  211. <div
  212. v-for="(goodsList, index) in form.goodsList"
  213. :key="index"
  214. class="shopListWrap"
  215. >
  216. <el-form-item
  217. :label="'商品名称' + (index + 1)"
  218. :label-width="formLabelWidth"
  219. class="setWidth"
  220. :prop="'goodsList.' + index + '.id'"
  221. :rules="[
  222. { required: true, message: '请选择商品', trigger: 'change' }
  223. ]"
  224. >
  225. <el-select
  226. v-if="isAdd"
  227. v-model.trim="goodsList.id"
  228. filterable
  229. :disabled="!isAdd"
  230. placeholder="请选择商品"
  231. :popper-append-to-body="false"
  232. >
  233. <el-option
  234. :title="item.name"
  235. v-for="(item, index) in shopList"
  236. :key="index"
  237. :label="item.name"
  238. :value="item.id"
  239. ></el-option>
  240. </el-select>
  241. <p class="showShop" v-else>
  242. <Tooltip :content="goodsList.id | filterShopId" />
  243. </p>
  244. </el-form-item>
  245. <el-form-item
  246. class="setWidth"
  247. style="margin-right: 10px;margin-left: 10px;"
  248. :prop="'goodsList.' + index + '.number'"
  249. >
  250. <!-- :rules="validAmount" <el-input-number style="width: 160px;" v-model="goodsList.number" placeholder="商品数量"></el-input-number> -->
  251. <el-input
  252. type="age"
  253. style="width: 160px"
  254. :disabled="!isAdd"
  255. clearable
  256. placeholder="请输入商品数量"
  257. @mousewheel.native.prevent
  258. v-model.number="goodsList.number"
  259. ></el-input>
  260. </el-form-item>
  261. <el-button
  262. icon="el-icon-minus"
  263. :disabled="!isAdd"
  264. v-if="form.goodsList.length > 1 && auditStatus == 'REJECT'"
  265. style="margin-bottom: 22px;"
  266. circle
  267. @click.prevent="removeGoodsList(goodsList)"
  268. ></el-button>
  269. <el-button
  270. icon="el-icon-plus"
  271. :disabled="!isAdd"
  272. v-if="auditStatus == 'REJECT'"
  273. @click.prevent="addGoodsList"
  274. circle
  275. style="margin-left: 5px; margin-bottom: 22px;"
  276. ></el-button>
  277. </div>
  278. </div>
  279. <div class="lookTitle">其它</div>
  280. <el-form-item
  281. label="提交备注"
  282. :label-width="formLabelWidth"
  283. :rules="[
  284. { required: true, message: '请输入提交备注', trigger: 'change' }
  285. ]"
  286. >
  287. <el-input
  288. placeholder="请输入备注"
  289. :disabled="!isAdd"
  290. v-model.trim="form.memo"
  291. type="textarea"
  292. :rows="3"
  293. ></el-input>
  294. </el-form-item>
  295. <!-- &&auditStatus != 'REJECT' -->
  296. <el-form-item
  297. label="审核备注"
  298. v-if="auditStatus != 'ING'"
  299. :label-width="formLabelWidth"
  300. >
  301. <el-input
  302. placeholder="请输入备注"
  303. :disabled="true"
  304. v-model.trim="form.auditComment"
  305. type="textarea"
  306. :rows="3"
  307. ></el-input>
  308. </el-form-item>
  309. </el-form>
  310. <div class="lookTitle" v-if="auditStatus == 'ING'">
  311. 审核意见
  312. </div>
  313. <el-form :model="submitForm" v-if="auditStatus == 'ING'" ref="submitForm">
  314. <el-form-item
  315. prop="memo"
  316. :rules="[
  317. { required: true, message: '请输入审核意见', trigger: 'blur' }
  318. ]"
  319. >
  320. <el-input
  321. type="textarea"
  322. :rows="4"
  323. v-model="submitForm.memo"
  324. ></el-input>
  325. </el-form-item>
  326. </el-form>
  327. </div>
  328. </template>
  329. <script>
  330. import {
  331. getRouteOrderInfo,
  332. auditOutOrder,
  333. updateRouteOrder
  334. } from "@/api/orderManager";
  335. import { orderServerList } from "@/utils/searchArray";
  336. import { getCooperation } from "@/api/buildTeam";
  337. import Tooltip from "@/components/Tooltip/index";
  338. let that;
  339. export default {
  340. components: { Tooltip },
  341. props: ["orderId", "shopList", "isLook"],
  342. data() {
  343. return {
  344. formLabelWidth: "100px",
  345. form: {
  346. routeOrganId: null,
  347. transNo: null,
  348. type: "OTHER",
  349. merNo: null,
  350. actualAmount: null,
  351. memo: null,
  352. payTime: null,
  353. serviceAmount: null,
  354. goodsAmount: null,
  355. schoolId: null,
  356. goodsList: [
  357. {
  358. id: null,
  359. number: null
  360. }
  361. ],
  362. applyType: null,
  363. userId: "",
  364. auditComment: "",
  365. calenderId: ""
  366. },
  367. isAdd: !this.isLook,
  368. insertOrderType: 1, // 订单类型 1 个人订单 2 学校订单 2 其它订单
  369. cooperationList: [],
  370. submitForm: {
  371. memo: ""
  372. },
  373. auditStatus: "",
  374. orderServerList: orderServerList,
  375. clearSchool: false
  376. };
  377. },
  378. created() {
  379. that = this;
  380. },
  381. mounted() {
  382. if (this.orderId) {
  383. getRouteOrderInfo({ id: this.orderId }).then(res => {
  384. if (res.code == 200) {
  385. let orderInfo = res.data;
  386. this.form = {
  387. createTime: orderInfo.createTime,
  388. operator: orderInfo.operator,
  389. routeOrganId: orderInfo.routeOrganId,
  390. transNo: orderInfo.transNo,
  391. type: "OTHER",
  392. merNo: orderInfo.merNo,
  393. actualAmount: orderInfo.actualAmount,
  394. memo: orderInfo.memo,
  395. payTime: orderInfo.payTime,
  396. serviceAmount: orderInfo.serviceAmount,
  397. saleAmount: orderInfo.saleAmount,
  398. schoolId: orderInfo.schoolId,
  399. userId: orderInfo.userId ? orderInfo.userId : "",
  400. auditComment: orderInfo.auditComment,
  401. applyType: orderInfo.saleAmount ? "SELL" : "SERVICE",
  402. calenderId: orderInfo.calenderId ? orderInfo.calenderId : ""
  403. };
  404. this.auditStatus = orderInfo.auditStatus;
  405. this.$set(
  406. this.form,
  407. "goodsList",
  408. this.getShopList(orderInfo.goodsJson)
  409. );
  410. this.changeOrgin(orderInfo.routeOrganId);
  411. if (orderInfo.userId && !res.data.calenderId) {
  412. this.insertOrderType = 1;
  413. } else if (res.data.calenderId && !orderInfo.userId) {
  414. this.insertOrderType = 2;
  415. } else {
  416. this.insertOrderType = 3;
  417. }
  418. // 添加类型判断
  419. // SCHOOL("SCHOOL", "学校订单"),
  420. // PERSONAL("PERSONAL", "个人订单"),
  421. // OTHER("OTHER", "其他")
  422. if (orderInfo.type !== "OUTORDER") {
  423. if (orderInfo.type === "OTHER") {
  424. this.insertOrderType = 3;
  425. } else if (orderInfo.type === "SCHOOL") {
  426. this.insertOrderType = 2;
  427. } else if (orderInfo.type === "PERSONAL") {
  428. this.insertOrderType = 1;
  429. }
  430. }
  431. this.clearSchool = true;
  432. }
  433. });
  434. }
  435. // 获取分部
  436. this.$store.dispatch("setBranchs");
  437. },
  438. methods: {
  439. changeOrgin(val) {
  440. if (val) {
  441. if (this.clearSchool) {
  442. this.$set(this.form, "schoolId", null);
  443. }
  444. getCooperation({ rows: 9999, organId: val }).then(res => {
  445. if (res.code === 200) {
  446. this.cooperationList = res.data.rows;
  447. }
  448. });
  449. }
  450. },
  451. getShopList(str) {
  452. let arr = [];
  453. try {
  454. const obj = JSON.parse(str);
  455. // id: item.goodsId, number: item.num
  456. for (let i in obj) {
  457. arr.push({ id: parseInt(i), number: obj[i] });
  458. }
  459. } catch {}
  460. return arr.length > 0 ? arr : [];
  461. },
  462. auditOutOrder(status) {
  463. const that = this;
  464. this.$refs.submitForm.validate(res => {
  465. if (res) {
  466. auditOutOrder({
  467. auditStatus: status,
  468. memo: this.submitForm.memo,
  469. studentPaymentRouteOrderId: this.orderId
  470. }).then(res => {
  471. if (res.code == 200) {
  472. this.$message.success("审核成功");
  473. that.$emit("getList");
  474. return;
  475. }
  476. });
  477. }
  478. });
  479. },
  480. removeGoodsList(item) {
  481. const index = this.form.goodsList.indexOf(item);
  482. if (index !== -1) {
  483. this.form.goodsList.splice(index, 1);
  484. }
  485. },
  486. addGoodsList() {
  487. this.form.goodsList.push({
  488. id: null,
  489. number: null
  490. });
  491. },
  492. submitReaet() {
  493. this.$refs.ruleForm.validate(valid => {
  494. if (valid) {
  495. let form = JSON.parse(JSON.stringify(this.form));
  496. if (!form.saleAmount && !form.serviceAmount) {
  497. this.$message.error("请输入销售收入或服务收入");
  498. return;
  499. }
  500. form.applyType == "SELL"
  501. ? (form.serviceAmount = 0)
  502. : (form.saleAmount = 0);
  503. if (!form.saleAmount) {
  504. form.goodsList = null;
  505. }
  506. let goodsJson = {};
  507. for (let i in form.goodsList) {
  508. goodsJson[form.goodsList[i]["id"]] = form.goodsList[i]["number"];
  509. }
  510. form.goodsJson =
  511. form.applyType == "SERVICE" ? null : JSON.stringify(goodsJson);
  512. form.id = this.orderId;
  513. form.auditStatus = "ING";
  514. if (this.insertOrderType == 1) {
  515. form.calenderId = null;
  516. } else if (this.insertOrderType == 2) {
  517. form.userId = null;
  518. }
  519. updateRouteOrder(form).then(res => {
  520. if (res.code == 200) {
  521. this.$message.success("修改成功");
  522. this.$emit("getList");
  523. return;
  524. } else {
  525. this.$message.error(res.msg);
  526. }
  527. });
  528. }
  529. });
  530. }
  531. },
  532. filters: {
  533. filterShopId(val) {
  534. let str = "";
  535. that.shopList.forEach(shop => {
  536. if (shop.id == val) {
  537. str = shop.name;
  538. }
  539. });
  540. return str;
  541. }
  542. }
  543. };
  544. </script>
  545. <style lang="scss" scoped>
  546. .lookTitle {
  547. height: 40px;
  548. line-height: 40px;
  549. font-weight: bold;
  550. background-color: rgb(237, 238, 240);
  551. padding: 0 20px;
  552. margin-bottom: 20px;
  553. }
  554. .setWidth {
  555. display: inline-block;
  556. }
  557. .showShop {
  558. height: 40px;
  559. line-height: 40px;
  560. width: 150px;
  561. background-color: #f5f7fa;
  562. border-color: #e4e7ed;
  563. color: #c0c4cc;
  564. cursor: not-allowed;
  565. color: #333;
  566. opacity: 1;
  567. border-radius: 4px;
  568. border: 1px solid #dcdfe6;
  569. padding: 0 15px;
  570. margin-right: 10px;
  571. }
  572. .shopListWrap {
  573. display: flex;
  574. flex-direction: row;
  575. justify-content: flex-start;
  576. }
  577. </style>