orderAuditDetail.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517
  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="[{pattern:/^[0-9]*$/,message:'请输入正确的缴费单号',trigger: 'blur'}]"
  76. >
  77. <el-input
  78. v-model.trim="form.calenderId"
  79. :disabled="!isAdd"
  80. placeholder="请输入缴费单号"
  81. ></el-input>
  82. </el-form-item>
  83. <el-form-item
  84. label="学员编号"
  85. prop="userId"
  86. v-if="insertOrderType == 1 || insertOrderType == 3"
  87. :label-width="formLabelWidth"
  88. >
  89. <el-input
  90. v-model.trim="form.userId"
  91. :disabled="!isAdd"
  92. placeholder="请输入学员编号"
  93. ></el-input>
  94. </el-form-item>
  95. <div class="lookTitle">交易信息</div>
  96. <el-form-item
  97. label="交易流水号"
  98. :rules="[
  99. { required: true, message: '请输入流水号', trigger: 'change' },
  100. ]"
  101. prop="transNo"
  102. :label-width="formLabelWidth"
  103. >
  104. <el-input
  105. placeholder="请输入交易流水号"
  106. type="text"
  107. :disabled="!isAdd"
  108. v-model.trim="form.transNo"
  109. ></el-input>
  110. </el-form-item>
  111. <el-form-item
  112. label="收款账户"
  113. prop="merNo"
  114. :rules="[
  115. { required: true, message: '请输入收款账户', trigger: 'change' },
  116. ]"
  117. :label-width="formLabelWidth"
  118. >
  119. <el-input
  120. placeholder="请输入收款账户"
  121. type="text"
  122. :disabled="!isAdd"
  123. v-model.trim="form.merNo"
  124. ></el-input>
  125. </el-form-item>
  126. <el-form-item
  127. label="交易日期"
  128. :rules="[
  129. { required: true, message: '请选择交易日期', trigger: 'change' },
  130. ]"
  131. prop="payTime"
  132. :label-width="formLabelWidth"
  133. >
  134. <el-date-picker
  135. style="width: 100%"
  136. :disabled="!isAdd"
  137. v-model="form.payTime"
  138. type="datetime"
  139. format="yyyy-MM-dd HH:mm:ss"
  140. value-format="yyyy-MM-dd HH:mm:ss"
  141. placeholder="选择交易日期"
  142. >
  143. </el-date-picker>
  144. </el-form-item>
  145. <el-form-item
  146. label="收入类型"
  147. :label-width="formLabelWidth"
  148. :rules="[
  149. { required: true, message: '请选收入类型', trigger: 'change' },
  150. ]"
  151. prop="applyType"
  152. >
  153. <el-select
  154. class="multiple"
  155. style="width: 100% !important"
  156. v-model.trim="form.applyType"
  157. filterable
  158. clearable
  159. :disabled="!isAdd"
  160. placeholder="请选择收入类型"
  161. >
  162. <el-option
  163. v-for="(item, index) in orderServerList"
  164. :key="index"
  165. :label="item.label"
  166. :value="item.value"
  167. ></el-option>
  168. </el-select>
  169. </el-form-item>
  170. <el-form-item
  171. label="销售金额"
  172. prop="saleAmount"
  173. :rules="[
  174. { required: true, message: '请输入销售金额', trigger: 'change' },
  175. ]"
  176. v-if="form.applyType == 'SELL'"
  177. :label-width="formLabelWidth"
  178. >
  179. <el-input
  180. v-model="form.saleAmount"
  181. @mousewheel.native.prevent
  182. type="number"
  183. :disabled="!isAdd"
  184. placeholder="请输入销售金额"
  185. />
  186. </el-form-item>
  187. <el-form-item
  188. label="服务金额"
  189. v-if="form.applyType == 'SERVICE'"
  190. :rules="[
  191. { required: true, message: '请输入服务金额', trigger: 'change' },
  192. ]"
  193. prop="serviceAmount"
  194. :label-width="formLabelWidth"
  195. >
  196. <el-input
  197. type="number"
  198. @mousewheel.native.prevent
  199. :disabled="!isAdd"
  200. v-model="form.serviceAmount"
  201. placeholder="请输入收入金额"
  202. />
  203. </el-form-item>
  204. <div v-if="form.applyType == 'SELL'">
  205. <div v-for="(goodsList, index) in form.goodsList" :key="index">
  206. <el-form-item
  207. :label="'商品名称' + (index + 1)"
  208. :label-width="formLabelWidth"
  209. class="setWidth"
  210. :prop="'goodsList.' + index + '.id'"
  211. :rules="[
  212. { required: true, message: '请选择商品', trigger: 'change' },
  213. ]"
  214. >
  215. <el-select
  216. v-model.trim="goodsList.id"
  217. filterable
  218. :disabled="!isAdd"
  219. placeholder="请选择商品"
  220. >
  221. <el-option
  222. v-for="(item, index) in shopList"
  223. :key="index"
  224. :label="item.name"
  225. :value="item.id"
  226. ></el-option>
  227. </el-select>
  228. </el-form-item>
  229. <el-form-item
  230. class="setWidth"
  231. style="margin-right: 10px"
  232. :prop="'goodsList.' + index + '.number'"
  233. >
  234. <!-- :rules="validAmount" <el-input-number style="width: 160px;" v-model="goodsList.number" placeholder="商品数量"></el-input-number> -->
  235. <el-input
  236. type="age"
  237. style="width: 160px"
  238. :disabled="!isAdd"
  239. clearable
  240. placeholder="请输入商品数量"
  241. @mousewheel.native.prevent
  242. v-model.number="goodsList.number"
  243. ></el-input>
  244. </el-form-item>
  245. <el-button
  246. icon="el-icon-minus"
  247. :disabled="!isAdd"
  248. v-if="form.goodsList.length > 1 && auditStatus == 'REJECT'"
  249. circle
  250. @click.prevent="removeGoodsList(goodsList)"
  251. ></el-button>
  252. <el-button
  253. icon="el-icon-plus"
  254. :disabled="!isAdd"
  255. v-if="auditStatus == 'REJECT'"
  256. @click.prevent="addGoodsList"
  257. circle
  258. style="margin-left: 5px"
  259. ></el-button>
  260. </div>
  261. </div>
  262. <div class="lookTitle">其它</div>
  263. <el-form-item
  264. label="提交备注"
  265. :label-width="formLabelWidth"
  266. :rules="[
  267. { required: true, message: '请输入提交备注', trigger: 'change' },
  268. ]"
  269. >
  270. <el-input
  271. placeholder="请输入备注"
  272. :disabled="!isAdd"
  273. v-model.trim="form.memo"
  274. type="textarea"
  275. :rows="3"
  276. ></el-input>
  277. </el-form-item>
  278. <!-- &&auditStatus != 'REJECT' -->
  279. <el-form-item
  280. label="审核备注"
  281. v-if="auditStatus != 'ING'"
  282. :label-width="formLabelWidth"
  283. >
  284. <el-input
  285. placeholder="请输入备注"
  286. :disabled="true"
  287. v-model.trim="form.auditComment"
  288. type="textarea"
  289. :rows="3"
  290. ></el-input>
  291. </el-form-item>
  292. </el-form>
  293. <div class="lookTitle" v-if="auditStatus == 'ING'" v-permission="'routeOrder/auditOutOrder'">审核意见</div>
  294. <el-form :model="submitForm" v-if="auditStatus == 'ING'" ref="submitForm" v-permission="'routeOrder/auditOutOrder'">
  295. <el-form-item
  296. prop="memo"
  297. :rules="[
  298. { required: true, message: '请输入审核意见', trigger: 'blur' },
  299. ]"
  300. >
  301. <el-input
  302. type="textarea"
  303. :rows="4"
  304. v-model="submitForm.memo"
  305. ></el-input>
  306. </el-form-item>
  307. </el-form>
  308. </div>
  309. </template>
  310. <script>
  311. import {
  312. getRouteOrderInfo,
  313. auditOutOrder,
  314. updateRouteOrder,
  315. } from "@/api/orderManager";
  316. import { orderServerList } from "@/utils/searchArray";
  317. import { getCooperation } from "@/api/buildTeam";
  318. export default {
  319. props: ["orderId", "shopList", "isLook"],
  320. data() {
  321. return {
  322. formLabelWidth: "100px",
  323. form: {
  324. routeOrganId: null,
  325. transNo: null,
  326. type: "OTHER",
  327. merNo: null,
  328. actualAmount: null,
  329. memo: null,
  330. payTime: null,
  331. serviceAmount: null,
  332. goodsAmount: null,
  333. schoolId: null,
  334. goodsList: [
  335. {
  336. id: null,
  337. number: null,
  338. },
  339. ],
  340. applyType: null,
  341. userId: "",
  342. auditComment: "",
  343. calenderId:''
  344. },
  345. isAdd: !this.isLook,
  346. insertOrderType: 1, // 订单类型 1 个人订单 2 学校订单 2 其它订单
  347. cooperationList: [],
  348. submitForm: {
  349. memo: "",
  350. },
  351. auditStatus: "",
  352. orderServerList: orderServerList,
  353. clearSchool: false,
  354. };
  355. },
  356. mounted() {
  357. if (this.orderId) {
  358. getRouteOrderInfo({ id: this.orderId }).then((res) => {
  359. if (res.code == 200) {
  360. let orderInfo = res.data;
  361. this.form = {
  362. createTime: orderInfo.createTime,
  363. operator: orderInfo.operator,
  364. routeOrganId: orderInfo.routeOrganId,
  365. transNo: orderInfo.transNo,
  366. type: "OTHER",
  367. merNo: orderInfo.merNo,
  368. actualAmount: orderInfo.actualAmount,
  369. memo: orderInfo.memo,
  370. payTime: orderInfo.payTime,
  371. serviceAmount: orderInfo.serviceAmount,
  372. saleAmount: orderInfo.saleAmount,
  373. schoolId: orderInfo.schoolId,
  374. userId: orderInfo.userId ? orderInfo.userId : "",
  375. auditComment: orderInfo.auditComment,
  376. applyType: orderInfo.saleAmount ? "SELL" : "SERVICE",
  377. calenderId:orderInfo.calenderId?orderInfo.calenderId:''
  378. };
  379. this.auditStatus = orderInfo.auditStatus;
  380. this.$set(
  381. this.form,
  382. "goodsList",
  383. this.getShopList(orderInfo.goodsJson)
  384. );
  385. this.changeOrgin(orderInfo.routeOrganId);
  386. if(orderInfo.userId && !res.data.calenderId) {
  387. this.insertOrderType = 1
  388. } else if(res.data.calenderId && !orderInfo.userId) {
  389. this.insertOrderType = 2
  390. } else {
  391. this.insertOrderType = 3
  392. }
  393. this.clearSchool = true;
  394. }
  395. });
  396. }
  397. // 获取分部
  398. this.$store.dispatch("setBranchs");
  399. },
  400. methods: {
  401. changeOrgin(val) {
  402. if (val) {
  403. if (this.clearSchool) {
  404. this.$set(this.form, "schoolId", null);
  405. }
  406. getCooperation({ rows: 9999, organId: val }).then((res) => {
  407. if (res.code === 200) {
  408. this.cooperationList = res.data.rows;
  409. }
  410. });
  411. }
  412. },
  413. getShopList(str) {
  414. let arr = [];
  415. try {
  416. const obj = JSON.parse(str);
  417. // id: item.goodsId, number: item.num
  418. for (let i in obj) {
  419. arr.push({ id: parseInt(i), number: obj[i] });
  420. }
  421. } catch {}
  422. return arr.length > 0
  423. ? arr
  424. : [
  425. {
  426. id: null,
  427. number: null,
  428. },
  429. ];
  430. },
  431. auditOutOrder(status) {
  432. const that = this;
  433. this.$refs.submitForm.validate((res) => {
  434. if (res) {
  435. auditOutOrder({
  436. auditStatus: status,
  437. memo: this.submitForm.memo,
  438. studentPaymentRouteOrderId: this.orderId,
  439. }).then((res) => {
  440. if (res.code == 200) {
  441. this.$message.success("审核成功");
  442. that.$emit("getList");
  443. return;
  444. }
  445. });
  446. }
  447. });
  448. },
  449. removeGoodsList(item) {
  450. const index = this.form.goodsList.indexOf(item);
  451. if (index !== -1) {
  452. this.form.goodsList.splice(index, 1);
  453. }
  454. },
  455. addGoodsList() {
  456. this.form.goodsList.push({
  457. id: null,
  458. number: null,
  459. });
  460. },
  461. submitReaet() {
  462. this.$refs.ruleForm.validate((valid) => {
  463. if (valid) {
  464. let form = JSON.parse(JSON.stringify(this.form));
  465. if (!form.saleAmount && !form.serviceAmount) {
  466. this.$message.error("请输入销售收入或服务收入");
  467. return;
  468. }
  469. form.applyType == "SELL"
  470. ? (form.serviceAmount = 0)
  471. : (form.saleAmount = 0);
  472. if (!form.saleAmount) {
  473. form.goodsList = null;
  474. }
  475. let goodsJson = {};
  476. for (let i in form.goodsList) {
  477. goodsJson[form.goodsList[i]["id"]] = form.goodsList[i]["number"];
  478. }
  479. form.goodsJson =
  480. form.applyType == "SERVICE" ? null : JSON.stringify(goodsJson);
  481. form.id = this.orderId;
  482. form.auditStatus = "ING";
  483. if(this.insertOrderType == 1) {
  484. form.calenderId = null
  485. } else if(this.insertOrderType == 2) {
  486. form.userId = null
  487. }
  488. updateRouteOrder(form).then((res) => {
  489. if (res.code == 200) {
  490. this.$message.success("修改成功");
  491. this.$emit("getList");
  492. return;
  493. } else {
  494. this.$message.error(res.msg);
  495. }
  496. });
  497. }
  498. });
  499. },
  500. },
  501. };
  502. </script>
  503. <style lang="scss" scoped>
  504. .lookTitle {
  505. height: 40px;
  506. line-height: 40px;
  507. font-weight: bold;
  508. background-color: rgb(237, 238, 240);
  509. padding: 0 20px;
  510. margin-bottom: 20px;
  511. }
  512. .setWidth {
  513. display: inline-block;
  514. }
  515. </style>