orderAuditDetail.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531
  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. // 添加类型判断
  394. // SCHOOL("SCHOOL", "学校订单"),
  395. // PERSONAL("PERSONAL", "个人订单"),
  396. // OTHER("OTHER", "其他")
  397. if(orderInfo.type !== 'OUTORDER'){
  398. if(orderInfo.type === 'OTHER') {
  399. this.insertOrderType = 3
  400. } else if(orderInfo.type === 'SCHOOL') {
  401. this.insertOrderType = 2
  402. } else if(orderInfo.type === 'PERSONAL') {
  403. this.insertOrderType = 1
  404. }
  405. }
  406. this.clearSchool = true;
  407. }
  408. });
  409. }
  410. // 获取分部
  411. this.$store.dispatch("setBranchs");
  412. },
  413. methods: {
  414. changeOrgin(val) {
  415. if (val) {
  416. if (this.clearSchool) {
  417. this.$set(this.form, "schoolId", null);
  418. }
  419. getCooperation({ rows: 9999, organId: val }).then((res) => {
  420. if (res.code === 200) {
  421. this.cooperationList = res.data.rows;
  422. }
  423. });
  424. }
  425. },
  426. getShopList(str) {
  427. let arr = [];
  428. try {
  429. const obj = JSON.parse(str);
  430. // id: item.goodsId, number: item.num
  431. for (let i in obj) {
  432. arr.push({ id: parseInt(i), number: obj[i] });
  433. }
  434. } catch {}
  435. return arr.length > 0
  436. ? arr
  437. : [
  438. {
  439. id: null,
  440. number: null,
  441. },
  442. ];
  443. },
  444. auditOutOrder(status) {
  445. const that = this;
  446. this.$refs.submitForm.validate((res) => {
  447. if (res) {
  448. auditOutOrder({
  449. auditStatus: status,
  450. memo: this.submitForm.memo,
  451. studentPaymentRouteOrderId: this.orderId,
  452. }).then((res) => {
  453. if (res.code == 200) {
  454. this.$message.success("审核成功");
  455. that.$emit("getList");
  456. return;
  457. }
  458. });
  459. }
  460. });
  461. },
  462. removeGoodsList(item) {
  463. const index = this.form.goodsList.indexOf(item);
  464. if (index !== -1) {
  465. this.form.goodsList.splice(index, 1);
  466. }
  467. },
  468. addGoodsList() {
  469. this.form.goodsList.push({
  470. id: null,
  471. number: null,
  472. });
  473. },
  474. submitReaet() {
  475. this.$refs.ruleForm.validate((valid) => {
  476. if (valid) {
  477. let form = JSON.parse(JSON.stringify(this.form));
  478. if (!form.saleAmount && !form.serviceAmount) {
  479. this.$message.error("请输入销售收入或服务收入");
  480. return;
  481. }
  482. form.applyType == "SELL"
  483. ? (form.serviceAmount = 0)
  484. : (form.saleAmount = 0);
  485. if (!form.saleAmount) {
  486. form.goodsList = null;
  487. }
  488. let goodsJson = {};
  489. for (let i in form.goodsList) {
  490. goodsJson[form.goodsList[i]["id"]] = form.goodsList[i]["number"];
  491. }
  492. form.goodsJson =
  493. form.applyType == "SERVICE" ? null : JSON.stringify(goodsJson);
  494. form.id = this.orderId;
  495. form.auditStatus = "ING";
  496. if(this.insertOrderType == 1) {
  497. form.calenderId = null
  498. } else if(this.insertOrderType == 2) {
  499. form.userId = null
  500. }
  501. updateRouteOrder(form).then((res) => {
  502. if (res.code == 200) {
  503. this.$message.success("修改成功");
  504. this.$emit("getList");
  505. return;
  506. } else {
  507. this.$message.error(res.msg);
  508. }
  509. });
  510. }
  511. });
  512. },
  513. },
  514. };
  515. </script>
  516. <style lang="scss" scoped>
  517. .lookTitle {
  518. height: 40px;
  519. line-height: 40px;
  520. font-weight: bold;
  521. background-color: rgb(237, 238, 240);
  522. padding: 0 20px;
  523. margin-bottom: 20px;
  524. }
  525. .setWidth {
  526. display: inline-block;
  527. }
  528. </style>