exit.ts 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. import { shallowRef, reactive, computed } from 'vue'
  2. import { v4 } from 'uuid'
  3. import { useDataTable } from '@/hooks/datatable'
  4. import { cjjcApply, queryGZCJJCOrder, cjjcMemberOperate, queryGZCJJCOrderDetail, queryGzcjjcorderoperate } from '@/services/api/customs'
  5. import { ClientType } from '@/constants/client'
  6. import { loginStore } from '@/stores'
  7. import Long from 'long'
  8. const { userId } = loginStore.$mapGetters()
  9. // 出境检测列表
  10. export function useCJJCOrderList() {
  11. const { dataList, total, pageIndex, pageSize } = useDataTable<Ermcp.GZCJJCOrderRsp>()
  12. const loading = shallowRef(false)
  13. const getGZCJJCOrderList = (params: Partial<Ermcp.GZCJJCOrderReq> = {}) => {
  14. loading.value = true
  15. return queryGZCJJCOrder({
  16. data: {
  17. page: pageIndex.value,
  18. pagesize: pageSize.value,
  19. userid: userId.value,
  20. executestatus: params.executestatus,
  21. },
  22. success: (res) => {
  23. total.value = res.total
  24. dataList.value = res.data
  25. },
  26. complete: () => {
  27. loading.value = false
  28. }
  29. })
  30. }
  31. return {
  32. loading,
  33. dataList,
  34. total,
  35. pageIndex,
  36. pageSize,
  37. getGZCJJCOrderList,
  38. }
  39. }
  40. // 出境检测单据明细
  41. export function useGZCJJCOrderDetail(selectedRow: Ermcp.GZCJJCOrderRsp) {
  42. const loading = shallowRef(false)
  43. const detailList = shallowRef<Ermcp.GZCJJCOrderDetailRsp[]>([])
  44. const columns = computed<Ermcp.TableColumn[]>(() => {
  45. switch (selectedRow.gzcjaccounttype) {
  46. case 1: {
  47. return [
  48. { prop: 'gzno', label: '货物编号' },
  49. { prop: 'gzcjshapetypestring', label: '形状', width: 200 },
  50. { prop: 'weight', label: '重量ct' },
  51. { prop: 'amount', label: '参考货值USD' },
  52. { prop: 'colorinfo', label: '彩钻信息' },
  53. { prop: 'remark', label: '其他' },
  54. ]
  55. }
  56. case 2: {
  57. return [
  58. { prop: 'gzno', label: '货物编号' },
  59. { prop: 'gzcjshapetypestring', label: '形状', width: 200 },
  60. { prop: 'weight', label: '重量ct' },
  61. { prop: 'amount', label: '参考货值USD' },
  62. { prop: 'gzcjmarktype', label: '刻印服务(证书号/ 其他/ 无)', width: 220 },
  63. { prop: 'gzcjpublishtypestring', label: '是否披露处理' },
  64. { prop: 'gzcjservicetypestring', label: '服务类别' },
  65. { prop: 'origincertno', label: '原证书号' },
  66. { prop: 'colorinfo', label: '彩钻信息' },
  67. { prop: 'remark', label: '其他' },
  68. ]
  69. }
  70. }
  71. return []
  72. })
  73. const getGZCJJCOrderDetailList = () => {
  74. loading.value = true
  75. return queryGZCJJCOrderDetail({
  76. data: {
  77. userid: userId.value,
  78. orderid: selectedRow.orderidstr,
  79. },
  80. success: (res) => {
  81. detailList.value = res.data
  82. },
  83. complete: () => {
  84. loading.value = false
  85. }
  86. })
  87. }
  88. return {
  89. loading,
  90. detailList,
  91. columns,
  92. getGZCJJCOrderDetailList,
  93. }
  94. }
  95. // 出境检测申请
  96. export function useCJJCOrderApply(selectedRow?: Ermcp.GZCJJCOrderRsp) {
  97. const { UserID, LoginID, LoginCode, AccountIDs } = loginStore.state.loginInfo
  98. const loading = shallowRef(false)
  99. const formData = reactive<Partial<Proto.CJJCApplyReq>>({
  100. UserID,
  101. AccountID: AccountIDs[0],
  102. OperateID: LoginID, // 操作人ID,LoginAccount的LoginID,必填
  103. OperateAccount: LoginCode || LoginID.toString(), // 操作人账户,LoginAccount的LoginCode,LoginCode为空则填LoginID,必填
  104. GZCJCategoryDetails: [],
  105. ClientType: ClientType.Web,
  106. })
  107. if (selectedRow?.orderidstr) {
  108. ({
  109. userid: formData.UserID,
  110. accountid: formData.AccountID,
  111. gzcjaccounttype: formData.GZCJAccountType,
  112. gzcjaccount: formData.GZCJAccount,
  113. companynamecn: formData.CompanyNameCN,
  114. companynameen: formData.CompanyNameEn,
  115. addresscn: formData.AddressCN,
  116. addressen: formData.AddressEN,
  117. contactname: formData.ContactName,
  118. contactposition: formData.ContactPosition,
  119. contactphoneno: formData.ContactPhoneNo,
  120. email: formData.Email,
  121. gzcjcategorytype: formData.GZCJCategoryType,
  122. processingcountry: formData.ProcessingCountry,
  123. zsorigin: formData.ZSOrigin,
  124. gzcjdeliverytype: formData.GZCJDeliveryType,
  125. } = selectedRow)
  126. formData.OrderID = Long.fromString(selectedRow.orderidstr)
  127. queryGZCJJCOrderDetail({
  128. data: {
  129. userid: UserID,
  130. orderid: selectedRow.orderidstr,
  131. },
  132. success: (res) => {
  133. res.data.forEach((e) => {
  134. formData.GZCJCategoryDetails?.push({
  135. OrderIndex: e.orderindex,
  136. GZNo: e.gzno,
  137. GZCJShapeType: e.gzcjshapetype,
  138. Weight: e.weight,
  139. Amount: e.amount,
  140. ColorInfo: e.colorinfo,
  141. Remark: e.remark,
  142. GZCJMarkType: e.gzcjmarktype,
  143. GZCJPublishType: e.gzcjpublishtype,
  144. GZCJServiceType: e.gzcjservicetype,
  145. OriginCertNo: e.origincertno,
  146. })
  147. })
  148. }
  149. })
  150. } else {
  151. // 每次申请自动带入。或者记录第一次申请成功的信息。
  152. queryGZCJJCOrder({
  153. data: {
  154. page: 1,
  155. pagesize: 1,
  156. userid: UserID,
  157. },
  158. success: (res) => {
  159. if (res.data.length) {
  160. const item = res.data[0]
  161. formData.GZCJAccountType = item.gzcjaccounttype
  162. formData.GZCJAccount = item.gzcjaccount
  163. formData.CompanyNameCN = item.companynamecn
  164. formData.CompanyNameEn = item.companynameen
  165. formData.AddressCN = item.addresscn
  166. formData.AddressEN = item.addressen
  167. formData.ContactName = item.contactname
  168. formData.ContactPosition = item.contactposition
  169. formData.ContactPhoneNo = item.contactphoneno
  170. formData.Email = item.email
  171. }
  172. },
  173. })
  174. }
  175. const formSubmit = () => {
  176. loading.value = true
  177. return cjjcApply({
  178. data: {
  179. ...formData,
  180. ClientSerialNo: v4(),
  181. },
  182. complete: () => {
  183. loading.value = false
  184. }
  185. })
  186. }
  187. return {
  188. loading,
  189. formData,
  190. formSubmit,
  191. }
  192. }
  193. // 出境检测单据操作
  194. export function useCJJCOrderOperate({ orderidstr, gzcjstatus }: Ermcp.GZCJJCOrderRsp) {
  195. const loading = shallowRef(false)
  196. const details = shallowRef<Ermcp.GzcjjcorderoperateRsp>()
  197. const getGzcjjcorderoperate = () => {
  198. queryGzcjjcorderoperate({
  199. data: {
  200. orderid: orderidstr,
  201. status: gzcjstatus
  202. },
  203. success: (res) => {
  204. if (res.data.length) {
  205. details.value = res.data[0]
  206. }
  207. }
  208. })
  209. }
  210. return {
  211. loading,
  212. details,
  213. getGzcjjcorderoperate,
  214. }
  215. }
  216. // 出境检测操作
  217. export function useCJJCMemberOperate(orderId: string) {
  218. const { UserID, LoginID, LoginCode } = loginStore.state.loginInfo
  219. const loading = shallowRef(false)
  220. const formData = reactive<Proto.CJJCMemberOperateReq>({
  221. UserID, // 用户ID,必填
  222. OperateID: LoginID, // 操作人ID,必填,LoginAccount的LoginID
  223. OperateAccount: LoginCode || LoginID.toString(), // 操作人账户,LoginAccount的LoginCode,LoginCode为空则填LoginID,必
  224. OrderID: Long.fromString(orderId), // 单据ID,必填
  225. OperateType: 0, // 操作类型,必填,1:撤回2:确认发货3:确认检测结果
  226. ClientType: ClientType.Web, // 终端类型
  227. ClientSerialNo: '', // 客户端流水号
  228. })
  229. const formSubmit = () => {
  230. loading.value = true
  231. return cjjcMemberOperate({
  232. data: {
  233. ...formData,
  234. ClientSerialNo: v4(),
  235. },
  236. complete: () => {
  237. loading.value = false
  238. }
  239. })
  240. }
  241. return {
  242. loading,
  243. formData,
  244. formSubmit,
  245. }
  246. }